计算机操作系统基础知识点
1、操作系统引论
易错点:
- 在一段时间内置允许一个进程访问的资源称为临界资源或者独占资源
- 并发和共享是操作系统两个最基本的特征,两者之间互为存在的条件
- 文件的I/O需要在内核态进行,要使用系统调用接口
- shell属于命令解析器,属于命令接口
- 多道程序设计失去了封闭性和顺序性,顺序性是单道程序设计的基本特征
- 中断技术使得多道批处理系统和I/O设备可与CPU并行工作
批处理操作系统、分时操作系统和实时操作系统各有什么特点?
批处理操作系统的用户脱机使用计算机,作业都是成批处理的,系统内多道程序并发执行,交互能力差。
分时操作系统可让多个用户同时使用计算机,人机交互性较强,具有每个用户独立使用计算机的独占性,系统响应及时。
实时操作系统能对控制对象做出及时反映,可靠性高,响应及时,但资源利用率低。
处理器为什么要区分核心态和用户态两种操作方式?在什么情况下进行两种方式的切换?
区分执行态的主要目的是保护系统程序。用户态到核心态的转换发生在中断产生时,而核心态到用户态的转换则发生在中断返回用户程序时。
2、进程的描述和控制
生产者-消费者问题
PV操作题目分析步骤:
- 关系分析。 找出题目中描述的各个进程,分析它们之间的同步、互斥关系。
- 整理思路。 根据各进程的操作流程确定P、V操作的大致顺序。
- 设置信号量。 设置需要的信号量,并根据题目条件确定信号量初值。(互斥信号量初值一般为1,同步信号量的初始值要看对应资源的初始值是多少)
利用记录型信号量解决生产者-消费者问题
item buffer[n]
semaphore mutex = 1;//互斥信号量,实现对缓冲区的互斥访问
semaphore empty = n;//同步信号量,表示空闲缓冲区的数量
semaphore full = 0; //同步信号量,表示产品的数量,也即非空缓冲区的数量
prodecer (){
while(1){
生产一个产品;
P(emoty);
P(mutex);
把产品放入缓冲区;
V(mutex);
V(full);
}
}
consumer (){
while(1){
P(full);
P(mutex);
从缓冲区取出一个产品;
V(mutex);
V(empty);
使用产品;
}
}
- 在生产者-消费者问题中应注意:首先,在每个程序中用于实现互斥的wait(mutex)和signal(mutex)必须成对地出现;其次,对资源信号量empty和 full的wait和signal操作,同样需要成对地出现,但它们分别处于不同的程序中。
- 例如,wait(empty)在计算进程中,而signal(empty)则在打印进程中,计算进程若因执行wait(empty)而阻塞,则以后将由打印进程将它唤醒;最后,在每个程序中的多个wait操作顺序不能颠倒。应先执行对资源信号量的wait操作,然后再执行对互斥信号量的wait 操作,否则可能引起进程死锁。
哲学家进餐问题
解决方案:
- 可以对哲学家进程施加一些限制条件,比如最多允许四个哲学家同时进餐。这样可以保证至少有一个哲学家是可以拿到左右两只筷子的
- 要求奇数号哲学家先拿左边的筷子,然后再拿右边的筷子,而偶数号哲学家刚好相反。用这种方法可以保证如果相邻的两个奇偶号哲学家都想吃饭,那么只会有其中一个可以拿起第一只筷子,另一个会直接阻塞。这就避免了占有一支后再等待另一只的情况。
- 仅当一个哲学家左右两支筷子都可用时才允许他抓起筷子。
利用记录型信号量解决哲学家进餐问题
semaphore chopstick[5]={1,1,1,1,1};
semaphore mutex = 1;//互斥地取筷子
Pi(){ //i号哲学家的进程
while(1){
p(mutex);
P(chopstick[i]); //拿左
P(chopstick[(i+1)%5]; //拿右
V(mutex);
吃饭...
V(chopstick[i]); //放左
V(chopstick[(i+1)%5];//放右
思考...
}
}
- 哲学家进餐问题的关键在于解决进程死锁。
- 这些进程之间只存在互斥关系,但是与之前接触到的互斥关系不同的是,每个进程都需要同时持有两个临界资源,因此就有“死锁”问题的隐患。
- 如果遇到了一个进程需要同时持有多个临界资源的情况,应该参考哲学家问题的思想,分析题中给出的进程之间是否会发生循环等待,是否会发生死锁。
- 可以参考哲学家就餐问题解决死锁的三种思路。
读者-写者问题
- 读进程与读进程不存在互斥问题。写者进程和任何进程都互斥。设置一个互斥信号量rw,在写者访问共享文件前后分别执行P、V操作。读者进程和写者进程也要互斥,因此读者访问共享文件前后也要对rw执行P、V操作。
Semapore rmutex = 1;//计数器
Semapore wmutex = 1;//阀门
int readcount = 0;
Wruter():
while(true){
wait(wmutex);
写;
signal(wmutex);
};
Reader():
while(true){
wait(rmutex);
if(readcount == 0)
wait(wmutex);
readcount++;
signal(rmutex)
读;
wait(rmutex);
readcount--;
if(readcount == 0)
signal(wmutex);
signal(rmutex);
};
3、处理机调度与死锁
先来先服务算法(FCFS)
短进程优先算法(SPF)
高优先权优先算法(HRRN)
安全状态与不安全状态
银行家算法
4、存储器管理
存储器的层次结构
首次适应算法
循环首次适应算法
最佳适应算法
最坏适应算法
相关计算
5、虚拟存储器
最佳置换算法(OPT)
先进先出置换算法
最近最久未使用算法(LRU)
6、输入输出设备
先来先服务算法
最短寻道时间优先算法
扫描算法
循环扫描算法
7、文件管理