操作系统学习过程中,重要的事情和忘记的内容。更新中。
陷入(访管)指令仅在用户态下执行。
区分用户态和核心态的目的是保护系统程序。
用户态到核心态转换发生在中断产生时,核心态到用户态的转换发生在中断返回用户程序时。
微内核的好处:1.添加系统服务时,可以不必修改内核。2.使系统更可靠。
不需要信号量就能实现的功能是:进程的并发执行。信号量机制是用来实现进程的同步和互斥的。
所谓临界区就是指访问临界资源的那段代码程序,如P/V操作、加减锁。操作系统访问临界资源时关心的是临界区的操作过程,具体是对临界资源做什么操作,操作系统并不关心。
并发进程因为共享资源而产生相互之间的制约关系,可以分为两类:1⃣️互斥关系:指进程之间因为相互竞争使用独占型资源所产生的制约关系。2⃣️同步关系:指进程之间为协同工作需要交换信息,相互等待而产生的制约关系。
管程是由一组数据及定义在这组数据之上的对这组数据的操作组成的软件模块,这组操作能初始化并改变管程中的数据和进程同步。管程不仅能实现进程间的互斥,而且能实现进程间的同步。一个进程只有通过调用管程内的过程才能进入管程访问共享数据。**定义:**一个管程定义了一个数据结构和能为并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据。由定义可知,管程由三部分组成:1.局部于管程的共享变量说明。2.该数据结构进行操作的一组过程。3.对局部于管程的数据设置初始值的语句,此外,还需为该管程赋予一个名字。改成的引入是为了解决临界区分散带来的管理和控制问题。
**Peterson算法:**为了防止两个进程为进入临界区而无限期等待,设置了变量turn
表示允许进入临界区的编号。每个进程在先设置自己的标志后再设置turn
标志,允许另一个进程进入。这时,再同时检测另一个进程状态标志和允许进入标志,就可以保证两个进程同时要求进入临界区时只允许一个进程进入。保存的事较晚一次复制,因此较晚的进程等待,较早的进程进入。先到先入,后到等待。
信箱通信是一种间接通信方式。
哲学家进餐问题:
semaphore chopstick[5] = {1, 1, 1, 1, 1}//定义信号量数组并初始化
semaphore mutex = 1;//设置取筷子的信号量
Pi() {
do {
P(mutex);
P(chopstick[i]);
P(chopstick[(i+1)%5]);
V(mutex);
eat;
V(chopstick[i]);
V(chopstick[(i+1)%5];
think;
} while(1);
}