1、程序控制块(代码控制块)
从代码上来看,程序控制块就是一个结构体,例如:1
2
3
4
5
6typedef struct tcb{
char *code_name; //代码名称
int p; //重要性级别
int v_name; //版本号
void (*fun)(void); //指向管理代码的指针
}TCB;
上述实例只是最简单的关于程序控制块的说明,实际上操作系统中的程序控制块要远比例子复杂:一方面是需要记录的信息更多;另一方面它们的结构也更复杂。下图是一个稍微复杂的具有量机结构的程序控制块。
2、控制块的组织——链表
如果被管理的代码数量不大且其控制块又比较小的时候,通常会采用数组来作为程序控制块注册表。在操作系统中,需要被管理的代码数量通常比较大且其控制块又较大,可以通过链表来管理程序控制块,如下图所示
值得注意的是,链表的查询是比较耗时的,因为必须从链表表头沿指针逐个查询,所以为了提高查询效率,系统常常为链表配一个数组,而这个数组的各个元素则存储了指向各个链表成员的指针,这样可以通过数组来实现链表元素的快速随机查询。
链表和数组相配合的结构如下图所示
3、位图
操作系统中常常涉及到资源的使用情况记录,最简单的需要记录一个资源的占用(使用)状态(占用中or空闲),记录的方式有很多,最简单的就是使用一种叫做位图的表格,这种表格就是将二进制数拆开使用,每一位二进制数代表一个资源的占用状态(eg. 0代表空闲 1代表占用中)。