程序并发执行为什么会失去封闭性和再现性
答: 在并行执行程序时, 系统资源由多个程序所共享, 则这些资源必然由这些程序来改变. 程序执行时, 必然会受到其他程序的影响. 正是因为如此, 不能以程序作为作为描述其执行过程的基本单位, 催生了后来进程及进程上下文的出现.
什么叫进程的并发性?
答: 进程的并发性是指操作系统中可以同时运行多个进程, CPU 虽然一次只能执行一个进程, 但可以在多个进程之间进行快速的切换, 宏观时间上来看就是多个进程在并行执行.
试说明 PCB 的作用, 为什么说 PCB 是进程存在的唯一标志?
答: 进程是由 PCB, 程序和数据集合构成的, PCB 的存在体现了进程的动态性.
进程包含了进程标识符, 处理机状态 (由处理机的各种寄存器的内容组成), 进程调度信息和进程控制信息.
PCB 的存在是进程可以并发执行的关键, 进程从被唤醒到被挂起和被切换都需要 PCB 记录信息.
在进程被创建时, PCB 最早被创建, 进程被撤销时, PCB 最晚被释放. 所以可以说 PCB 是进程存在的标志.
进程的创建包含了哪些过程
(1) 申请空白 PCB. 为新进程申请一个唯一的进程标识符, 在 PCB 集合中申请一块空白 PCB.
(2) 为新进程分配资源. 主要是新进程的程序, 数据及用户栈所需的内存空间.
(3) 初始化 PCB. 主要是将各种信息填入 PCB 中, 如: 进程标识符, 父进程标识符, 处理机状态, 将程序计数器指向程序的入口地址, 栈指针指向栈顶, 处理机控制信息, 新进程设置为就绪状态, 新进程的优先级.
(4) 将新进程的 PCB 插入就绪队列.
进程的高级通信方式有哪几种?
(1) 共享存储器系统: 相互通信的进程共享某些数据结构或存储区, 进程之间通过这些空间通信.
(2) 消息传递系统: 分为直接通信方式和间接通信方式. 直接通信即两个进程之间直接发送 message. 间接通信即发送进程将 message 发送到信箱. 信箱又分为私有信箱, 公有信箱和共享信箱. 发送进程发送消息时, 先在自己的内存中申请一发送区, 将要发送的正文和其他一些信息填入其中. 发送原语则负责根据消息长度设置一个缓冲区, 即 "信箱". 将要发送的信息复制到其中. 接收进程再从缓冲区里复制信息.
Linux 系统的进程有几种状态?
(1) TASK-RUNNING 状态. 包含了运行状态和就绪状态, 具体是哪一种要靠是否占用了 CPU 资源来区分.
(2) TASK-INTERRUPTIBLE 状态. 进程正在等待某些事件. 可中断状态的进程可以被信号唤醒进入就绪状态等待被调入.
(3) TASK_UNINTERRUPTIBLE 状态. 因为某些硬件资源没满足而中断的进程.
(4) TASK_ZOMBIE 状态. 僵死状态. 由于某些原因进程被终止, 进程所有的资源都已经被释放, 但是 PCB 信息还被保留. 这种状态就称为僵死状态.
(5) TASK_STOPPED 状态. 暂停状态. 一般由运行状态转换而来, 等待某种特殊处理.
在读者 - 写者问题中, 修改问题的同步算法, 当有写进程到达时, 后续读进程必须等待, 而不管是否有读进程在读文件. 试写出相应的程序段.
- semaphore mutex; //mutex 是对文件进行读 \ 写操作的信号量.
- int readcount = 0, arrive = 0;//arrive 是表示写进程是否到达的变量, 0 表示未到达, 1 表示到达.
- void writer() {
- arrive = 1;
- wait(mutex);
写操作...
- signal(mutex);
- arrive = 0;
- }
- void reader() {
- if (arrive == 1) return;
- if (readcount == 0) {
- wait(mutex);
- }
- readcount++;
读操作...
- readcount--;
- signal(mutex);
- }
来源: http://www.bubuko.com/infodetail-3394602.html