简述动态重定位和静态重定位
静态重定位是目标程序装入内存时,由装入程序对目标程序中的指令和数据的地址进行修改,即将程序的逻辑地址转为物理地址。对每个程序来说,这种地址变换只是在装入时一次完成,在程序运行期间不再重定位。
动态重定位是在程序执行期间每次访问内存之前进行重定位。这种地址变换是依靠硬件地址变换机构实现的,通常采用一个重定位寄存器,其中放有当前正在执行的程序在内存空间中的起始地址,而地址空间中的代码在装入过程中不发生变换。
简述死锁和死锁的必要条件
是指两个或两个以上的进程在执行过程中,因争守资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,。
死锁的四个必要条件:1互斥: 至少有一个资源必须处于非共享模式,即一次只有一个进程可使用。如果另一进程申请该资源,那么申请进程应等到该资源释放为止。个进程应占有至少一个资源,并等待2请求和保持:另一个资源,而该资源为其他进程所占有。3不可抢占: 资源不能被抢占,即资源只能被进程在完成任务后自愿释放。4循环等待:存在一种进程资源的循环等待链,链中每个进程已获得的资源同时被链中下一个进程所请求。
现有四个进程R1、R2、W1、W2,它们共享可以存放一个数的缓冲器B。进程R1每次把来自键盘的一个数存入缓冲器B中,供进程W1打印输出;进程R2每次从磁盘上读一个数存放到缓冲器B中,供进程W2打印输出。为防止数据的丢失和重复打印,问怎样用信号量操作来协调这四个进程的并发执行。
S:互斥访问缓冲器
S1:是否可以让进程W1打印
S2:是否可以让进程W2打印semaphore S = 1, s1 = s2 = 0;
buffer B;
process R1() {int x;while(true) {接收来自键盘的数;x = 接收的数;wait(S);B = x;signal(S1);}
}
process R2() {int x;while(true) {接收来自磁盘的数;x = 接收的数;wait(S);B = x;signal(S2);}
}
process W1() {int k;while(true) {wait(S1);k = B;signal(S);打印k中的数;}
}
process W2() {int k;while(true) {wait(S2);k = B;signal(S);打印k中的数;}
}
桌子上有一个盘子,每次只能向其中放入一个水果。爸爸专向盘中放苹果,妈妈专向盘子中放橘子,L子专门吃盘子中的橘子,女儿专门等盘子中的苹果。只有当盘子为空时,爸爸或妈妈才向盘子中放个水果,仅当盘子中有自己需要的水果时,儿子或者女儿可以从盘子中取出。
Semaphore mutx = 1, apple = 0, orange = 0;
dad() { // 父亲进程while(1) {P(mutx); //等待放苹果向盘中放苹果;V(apple); //允许取苹果 }
}
mom() { // 母亲进程while(1) {P(mutx); //等待放橘子向盘中放橘子;V(orange); //允许取橘子 }
}
son() { // 儿子进程while(1) {P(apple); //等待取苹果向盘中取苹果;V(mutx); //允许放苹果 }
}
daughter() { // 女儿进程while(1) {P(orange); //等待取苹果向盘中取苹果;V(mutx); //允许放苹果 }
}
本文发布于:2024-01-29 09:48:32,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170649291414427.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |