[Postgrado en sistema operativo informático] Apuntes de refuerzo

Directorio de artículos:

Uno: clasificación del tipo de pregunta PV

1. Problema productor-consumidor (conjuntos de varios chalecos)

2. El problema del peluquero (que implica tomar un número y llamar a un número, y salir corriendo cuando está ocupado)

3. El problema de los lectores y escritores: el mismo tipo no se excluye mutuamente, y los diferentes tipos se excluyen mutuamente

4. El problema de la comida de los filósofos

5. Problema de sincronización simple

2: La forma de investigación de los problemas de memoria

1. Cálculo de la derivación entre varios conceptos

2. Minería de información oculta de diagramas esquemáticos

3. Análisis basado en el proceso de conversión de direcciones

Tres: la relación entre TLB, tabla de páginas y caché

Cuatro: diagrama del sistema de archivos


Uno: clasificación del tipo de pregunta PV

1. Problema productor-consumidor (conjuntos de varios chalecos)

1. 有哪几类进程?——每类进程对应一个函数
2. 用中文描述每一类进程的动作顺序
3. 检查每一个动作之前,是否需要P操作,如果P了,那么记得补上配套的V(同步:哪些动作必须保证“一前一后”关系?
    互斥:注意隐含的互斥条件,通常是缓冲区、或某种独占资源)
4. 所有PV都写完之后,再逆向的定义各种信号量。
5. 检查多个P操作在一起的地方,有没有可能产生死锁(产生死锁的必要条件:保持和请求)

Ejemplo

某工厂有两个生产车间和一个装配车间,两个生产车间分别生产A、B两种零件,装配车间的任务是把A、B两种零件组装成产品。
两个生产车间每生产一个零件后,都要分别把它们送到装配车间的货架F1、F2上。
F1存放零件A,F2存放零件B,F1和F2的容量均可存放10个零件。
装配工人每次从货架上取一个零件A和一个零件B后组装成产品。请用P、V操作进行正确管



Semaphore mutex1=1; //互斥访问货架F1
Semaphore mutex2=1; //互斥访问货架F2
Semaphore empty1=10; //货架F1上有几个空位
Semaphore full1=0; //货架F1上有几个A零件
Semaphore empty2=10; //货架F2上有几个空位
Semaphore full2=0; //货架F2上有几个B零件

A车间的工作过程可描述为:
while(1){
生产一个产品A;
P(empty1);
P(mutex1);
将产品A存放到货架F1上;
V(mutex1);
V(full1);
}

B车间的工作过程可描述为:
while(1){
生产一个产品B;
P(empty2);
P(mutex2);
将产品B存放到货架F2上;
V(mutex2);
V(full2);
}

装配车间的工作过程可描述为:
while(1){
P(full1);
P(mutex1);
从货架F1上取一个A产品;
V(mutex1);
V(empty1);
P(full2);
P(mutex2);
从货架F2上取一个B产品;
V(mutex2);
V(empty2);
将取得的A产品和B产品组装成产品;
}
某寺庙有小和尚、老和尚若干,有一水缸,由小和尚提水入缸供老和尚饮用。
水缸可容10桶水,水取自同一井中。水井径窄,每次只能容一个桶取水。水桶总数为3个。
每次入缸取水仅为1桶水,且不可同时进行。试给出有关从缸取水、入水的算法描述



semaphore well=1;  //用于互斥地访问水井
semaphore vat=1;  //用于互斥地访问水缸
semaphore empty=10;  //用于表示水缸中剩余空间能容纳的水的桶数
semaphore full=0;  //表示水缸中的水的桶数
semaphore pail=3;  //表示有多少个水桶可以用,初值为3

//老和尚
while(1){
P(full);
P(pail);
P(vat);
从水缸中打一桶水;
V(vat);
V(empty);
喝水;
V(pail);
}

//小和尚
while(1){
P(empty);
P(pail);
P(well);
从井中打一桶水;
V(well);
P(vat);
将水倒入水缸中;
V(vat);
V(full);
V(pail);
}

2. El problema del peluquero (que implica tomar un número y llamar a un número, y salir corriendo cuando está ocupado)

 理发师、营业员都是这一类,顾客需要取号,没人的时候工作人员在摸鱼,一旦有客人完成取号,就需要唤醒
• 同步:只要有客人在等,店员就得工作
• 互斥:取号和叫号的时候同一时刻只能有一个人叫号,通过mutex实现互斥

Ejemplo

理发店理有一位理发师、一把理发椅和n把供等候理发的顾客坐的椅子。如果没有顾客,理发师便在理发椅上睡觉,一个顾客到来时,
顾客必须叫醒理发师,如果理发师正在理发时又有顾客来到,则如果有空椅子可坐,就坐下来等待,否则就离开。



int waiting =0;  //正在等候理发的顾客数
semaphore mutex =1; //互斥地访问waiting变量
semaphore customers =0; //用于实现“理发师等待顾客”的同步关系
semaphore tony =0; //用于实现“顾客等待理发师”的同步关系

TonyTeacher(){ //理发师进程
while(1){
P(customers); //等待顾客到来,无顾客则睡眠
P(mutex);  //互斥访问waiting变量
waiting--;  //等候顾客-1
V(mutex);  //开放临界区
V(tony);  //唤醒一个正在等待的顾客
为顾客理发;
}
}

customer(){ //顾客进程
P(mutex);  //互斥访问waiting变量
if(waiting<n){ //是否还有空椅子
waiting++;  //等候顾客数加1
V(mutex);  //访问完waiting变量
V(customers);  //唤醒理发师
P(tony);  //等待tony老师
接受tony的改造;
}
else
V(mutex);  //无座,转身离开
}
面包师有很多面包,由n个销售人员推销。每个顾客进店后取一个号,并且等待叫号,当一个销售人员空闲
下来时,就叫下一个号。试设计一个使销售人员和顾客同步的算法。



int i = 0; //顾客取到哪个号了
int j = 0; //销售员叫到哪个号了
semaphore mutex_i = 1; //互斥访问 i
semaphore mutex_j = 1; //互斥访问 j

Consumer() { //顾客
进入面包店;
P(mutex_i); //互斥访问i
取号i;
i++;
V(mutex_i); //释放对i的访问
等待叫号i并购买面包;
}

Seller() { //销售人员
while (1){
P(mutex_j); //互斥访问j
if (j < i){ //还有顾客在等待
叫号j;
j++;
V(mutex_j); //释放对j的访问
销售面包;
} else{ //暂时没有顾客在等待
V(mutex_j); //释放对j的访问
休息片刻;
}
}
}



Semaphore Sm=0; //实现同步关系:销售员叫号后唤醒正在等待的顾客
Semaphore Cs=0; //有几个已取号顾客

//第i个顾客,i∈[1,+∞)
consumer_i(){
进店;
取号;
V(Cs);
等待被叫号;
P(Sm);
被服务;
}

//第j个销售员,j∈[1,n]
salesman_j(){
while(1) {
P(Cs);
叫号;
V(Sm);
为顾客服务;
}
}

3. El problema de los lectores y escritores: el mismo tipo no se excluye mutuamente, y los diferentes tipos se excluyen mutuamente

读者写者问题主要是解决互斥,他的访问关系分为两种类型,一种是可以同时访问(读和读),另一种是必须互斥访问(写和读,写和写),因为多种关系,所以引入了计数器count


互斥:mutex。写过程是不容其他过程的,所以直接P(mutex),而读过程P(mutex)受计数器count影响,需要考虑是不是第一个读进程(负责P),
以及退出时是不是一个最后一个退出的(负责V)rw。读写之间的互斥

Ejemplo

有桥如图2-12所示。车流方向如箭头所示。回答如下问题:
1)假设该桥上每次只能有一辆车行驶,试用信号灯的P、V操作实现交通管理。
2)假设该桥上不允许两车交会,但允许同方向多个车一次通过(即桥上可有多个同方向行驶的车)。试用信号灯的P、V操作实现桥上交通管理



semaphore bridge=1; //用于互斥地访问桥
NtoS(){ //从北向南的车
P(bridge);
过桥;
V(bridge);
}
StoN(){ //从南向北的车
P(bridge);
过桥;
V(bridge);
}

 

读者与写者互斥:第一个读者负责上锁,最后一个读者负责解锁



int countSN=0; //正在从南到北过桥的汽车数量
int countNS=0; //正在从北到南过桥的汽车数量
semaphore mutexSN=1; //用于保护countSN
semaphore mutexNS=1; //用于保护countNS
semaphore bridge=1; //用于互斥地访问桥

StoN(){ //从南向北
P(mutexSN);
if(countSN==0)
P(bridge);
countSN++;
V(mutexSN);
过桥;
P(mutexSN);
countSN--;
if(countSN==0)
V(bridge);
V(mutexSN);
}

NtoS(){ //从北向南
P(mutexNS);
if(countNS==0)
P(bridge);
countNS++;
V(mutexNS);
过桥;
P(mutexNS);
countNS--;
if(countNS==0)
V(bridge);
V(mutexNS);
}
假设一个录像厅有1、2、3三种不同的录像片可由观众选择放映,录像厅的放映规则为:
1)任一时刻最多只能放映一种录像片,正在放映的录像片是自动循环放映的,最后一个观众主动离开时结
束当前录像片的放映;
2)选择当前正在放映的录像片的观众可立即进入,允许同时有多位选择同一种录像片的观众同时观看,同
时观看的观众数量不受限制;
3)等待观看其他录像片的观众按到达顺序排队,当一种新的录像片开始放映时,所有等待观看该录像片的
观众可依次序进入录像厅同时观看。用一个进程代表一个观众,要求:用信号量方法PV操作实现,并给出
信号量定义和初始值



semaphore room=1, mutex1=1, mutex2=1, mutex3=1;
int count1=0,count2=0,count3=0;

P1() {//看第一部影片的观众
P(mutex1);
count1++;
if(count1==1) //第一个上锁
P(room);
V(mutex1);
看影片1;
P(mutex1);
count1--;
if(count1==0) //最后一个解锁
V(room);
V(mutex1);
}

P2() {//看第一部影片的观众
P(mutex2);
count2++;
if(count2==1)
P(room);
V(mutex2);
看影片2;
P(mutex2);
count2--;
if(count2==0)
V(room);
V(mutex2);
}

P3() {//看第一部影片的观众
P(mutex3);
count3++;
if(count3==1)
P(room);
V(mutex3);
看影片3;
P(mutex3);
count3--;
if(count3==0)
V(room);
V(mutex3);
}
南开大学和天津大学之间有一条弯曲的路,每次只允许一辆自行车通过,但中间有小的安全岛M(同时允
许两辆车通过),可供已进入两端的两辆小车错车,如下图所示。设计算法并使用P、V操作实现


int T2N=1; //从T到N的互斥信号量
int N2T=1; //从N到T的互斥信号量
int L=1; //经过L路段的互斥信号量
int K=1; //经过K路段的互斥信号量

Procedure Bike T2N{
P(T2N);
P(L);
从T进入L;
进入M;
V(L);
P(K);
从K到N;
V(K);
V(T2N);
}

Procedure Bike N2T{
P(N2T);
p(K);
从N进入K;
进入M;
V(K);
P(L);
从L到T;
V(L);
V(N2T);
}

 

4. El problema de la comida de los filósofos

哲学家问题关键点是限制并行,主要是三种思路
• 1.限制申请条件(对应破坏死锁循环等待条件)解法一不通用
比如规定单号哲学家先取左筷子,双号先取右筷子
• 2.信号量限制并行数(解法二通用,参考2.4小题第8题确定最大
进程数)
如p89代码就是同一时间只能有一个哲学家就餐(禁止并行)
• 3.限制哲学家只有能够取得两个筷子的时候才会就餐(对应破坏
死锁条件)(解放三很通用,暴力美学,P(Lock);if(检查是全否
满足);V(Lock))

Ejemplo

【2011统考真题】某银行提供1个服务窗口和10个供顾客等待的座位。
顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使用。
当营业员空闲时,通过叫号选取一位顾客,并为其服务。顾客和营业员的活动过程描述如下:



cobegin(
process    顾客i
{
    从取号机获取一个号码;
    等待叫号;
    获取服务;
}
process营业员{
    while (TRUE){
        叫号;
        为客户服务;
                }
    )
} coend

请添加必要的信号量和PV〔或wait(), signal()]操作,实现上述过程中的互斥与同步。要求写出完整的过程,说明信号量的含义并赋初值。

• 同步:顾客的取号和工作人员的叫号通过同步信号量实现,顾客到达取号后就行p操作排队(这种方式等于是让计算机来实现排队过程),
        因为信号量机制中p会把自己阻塞,并进入拥塞队列,先来的顾客就在前面
• 互斥:取号机只有一个,可以通过队列实现叫号

5. Problema de sincronización simple

这类题只有多个工作的同步,只要能画出图找到同步关系即可,送分题,不需要过多关注

2: La forma de investigación de los problemas de memoria

1. Cálculo de la derivación entre varios conceptos

Key:熟悉掌握各种概念之间的关系(做题的时候注意总结)
一级页表+TLB+请求分页
二级页表+请求分页+TLB
    页目录号的位数+每个页目录项的大小→页目录表的大小?
    页目录号+页目录表的起始地址+页目录项的长度→页目录项的物理地址?

 

2. Minería de información oculta de diagramas esquemáticos

Key:
    ·多做题,多看,多积累,熟悉各种常见图示
    ·特别注意:TLB组相联映射、全相联映射的图示画法
    ·深入理解组相联映射、全相联映射方式下查询TLB的原理区别

 

3. Análisis basado en el proceso de conversión de direcciones

Key:自己手绘流程图,捋一遍
熟悉各种状况下地址转化的过程(自己画图复习)
    一级页表+虚拟内存+TLB
    二级页表+虚拟内存+TLB

Tres: la relación entre TLB, tabla de páginas y caché

Cuatro: diagrama del sistema de archivos

Supongo que te gusta

Origin blog.csdn.net/liu17234050/article/details/124369317
Recomendado
Clasificación