为thread 添加tid.

在操作系统学习过程中,作者经历了复杂的过程来为线程添加并分配tid。遇到问题是因为使用'0'初始化char数组导致线程号4和5无法分配。通过改用unsign long数组并初始化为0解决了这个问题。修改了threads文件夹中的tid.h和tid.cc,更新了fock方法,并调整了Makefile和Makefile.common以包含tid的相关文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

太苦逼了。从昨天晚上到今天下午才写好这么一个功能。

OS的学问真实博大精深,只是一个ID的存储过程就复杂到看的我想哭了。这还只是其中最简单的一部分。

好在,虽然还是有一些小问题,不过基本还是都解决了,终于可以稍微放送以下了,一会进行下一个作业。

已经是满面油光了阿。。。~

其中遇到了一个小问题,由于原来参考别人写代码中将page初始化为char []的格式,又将其中的每个字符初始值设为‘0’

这么做看似不错,但是在测试的时候,线程号4和5永远无法分配出去,这是因为‘0’的二进制值为48,所以导致轮到4和5的时候,其中一步判断无法继续下去。

将其该为unsign long [ ] ,并将初始值设置为数字 0 该问题得到解决。

1.首先在threads文件夹中添加已经写好的tid.h和tid.cc

//tid.h
//created by yumeng 2012-3-3
#ifndef TID_H
#define TID_H


/* max tid, equal to 2^15=32768
 最大线程id号,为了兼容16位机器*/
#define TID_MAX_DEFAULT 0x8000

/* page size = 2^12 = 4K
   PAGE_SHIFT :偏移量
   将1UL向左偏移12位,即为结果 */
#define PAGE_SHIFT 12
#define PAGE_SIZE (1UL << PAGE_SHIFT)

/*
每页的位数为2^15,每一位对应一个线程号
*/
#define BITS_PER_BYTE 8
#define BITS_PER_PAGE (PAGE_SIZE * BITS_PER_BYTE)
#define BITS_PER_PAGE_MASK (BITS_PER_PAGE - 1)

typedef struct tidmap
{
unsigned int nr_free;
unsigned long page[PAGE_
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值