2.6-控制块的理解
1.操作系统实质上就是一种管理软件。而所谓的管理,就是在了解管理对象的基本信息之后在需要时,按照某种规则对这些管理对象进行分配、调度等操作。对所有的被管理对象登记造册,建立一些管理用表并在这些表格中记录被管理对象的信息。在某种意义上说,操作系统就是由各种表格和对这些表格的操作组成的。
在操作系统中的每一个被管理的对象,不管这个对象是一个软件模块还是一个硬件装置,他都至少会有一个记录其基本信息的数据结构,操作系统就是依据这个控制块提供的信息来对这些对象进行管理的。控制块就是被控制对象在操作系统中的“身份证”。
在代码上来讲,控制块就是一个结构体:
typedef struct tcb
{
char* code_name;
int p;
int v_num;
void(*fun)();
}TCB;
其中,函数指针fun指向的便是被管理的函数模块,结构tcb中的其他各域都是这个被管理函数模块的相关信息。
实际操作系统所使用的程序控制块比以上的复杂!一是操作系统需要记录的信息比较多,二是他们结构也复杂,具有多层结构。
既然是程序控制块,那么他们与相应代码关联的手段就是函数指针!
2.同类控制块的登记造册
在操作系统中,数组是将控制块登记成册最简便的工具
在数组不便于存放大量数据时,链表也是对控制块进行登记的手段。
链表登记控制块的做法:
在程序控制块中再添加两个指针成员,一个用来指向前一个控制块,另一个用来指向下一个控制块。
由于链表查询一个项目比较耗时,所以可以采取链表与数据结合的方式来提高查询的效率。系统会为链表分配一个数组,数组存放的时指针指向各个俩鸟成员的指针。这样就可以通过数组来实现链表元素的快速查询了!
为了在一度提高链表的查询速率,现在又出现使用哈希表的查询方式。
3.队列
在操作系统中,比较稀缺的资源(如处理器)都为其配置队列,凡是要资源使用这个,而这个资源正在被使用,这些后来的对象就必须等待,具体的做法是,把等待的那个对象控制块或控制块指针从队尾插入队列。
4.堆栈
为了实现C出现出现的函数调用嵌套,使用堆栈来保存断点,是一个合理办法。
5.位图
使用二进制位来表示一个具有两种状态的事物。
在操作系统中,对软硬件惊醒管理,常常需要对某些资源进行记录,最简单的就是要记录一个资源是否正在被使用。正在使用用1来表示,那么就可以用0来表示空闲状态。
6.中断计算机在执行某个过程时,被另一个更重要的事务打断,需要立即处理。这种中断程序不会自己主动的发生,是由计算机系统中的中断管理机构来实施。