1、进程的基本概念
2、进程的控制
3、进程同步
4、经典的进程同步互斥问题
5、进程通信
6、线程定义及实现
1.进程的基本概念 为了提高计算机系统中各种资源的利用率,现代操作系统广泛采用多道程序技术(multi-programming),使多个程序同时在系统中存在并运行。描述进程的数据结构——进程控制块(PCB) 一个进程应该包括: 程序的代码; 程序的数据; PC中的值,用来指示下一条将运行的指令; 一组通用的寄存器的当前值,堆、栈; 一组系统资源(如打开的文件) 程序是文本,是语句的描述(静态) 进程是运行中的程序,含有上下文信息(动态) 结构特征:程序段、相关的数据段、PCB构成了进程实体 动态性:进程是进程实体的一次执行,进程的状态总是在变化,PCB的内容总是在变化 并发性:多个进程实体,同存于内存中,能在一段时间内同时运行(宏观上) 独立性:独立运行和资源调度的基本单位。每个进程都有“自己”的PC和内部状态,运行时独立于其他的进程(逻辑PC和物理PC) 异步性:以各自独立的、不可预知的速度向前推进
2.进程的控制 Running运行 Blocked阻塞 Ready就绪 进程的三种基本状态 1) 就绪(Ready)状态:进程一旦获得CPU就可以投入运行的状态 2) 执行状态:进程获得CPU正在运行的状态 3) 阻塞状态:进程由于等待资源或某个事件的发生而暂停执行的状态 运行à阻塞 等待I/O的结果 等待某一进程提供输入 运行à就绪 运行进程用完了时间片 运行进程被中断,因为一高优先级进程处于就绪状态 就绪 à 运行 调度程序选择一个新的进程运行 阻塞 à就绪 当所等待的事件发生时
3.进程同步 两个进程使用相同的一个共享一个资源(如共享文件,打印机等)引出进程同步问题。 进程在运行过程中所做的工作分为两类: 内部计算(不会导致竞争条件) 对共享内存或共享文件的访问(可能导致竞争条件) 我们把完成第二类工作的程序称为“临界区”,把需要互斥访问的共享资源称为“临界资源”。如果我们能设计出某种方法,使得任何两个进程都不会同时出现在临界区中,就可以避免竞争条件的出现。 由Dijkstra把整型信号量定义为一个整型量,除初始化外,仅能通过两个标准的原子操作(Atomic Operation) wait(S)和signal(S)来访问。这两个操作一直被分别称为P、V操作。 wait(S): while S≤0 do no-op S:=S-1; signal(S): S:=S+1;
4.经典的进程同步互斥问题 4.1有3个客户在某天的日常生活中使用了某个 ATM 自动取款机。假设他们对 ATM 的使用顺序是 a 到来,a 进入, b 到来, c 到来, a 离开,b 进入, b 离开, c 进入, c 离开。 4.2某阅览室,最多可容纳100名读者同时阅览,当阅览室中少于100名读者时,阅览室外等候的读者可以立即进入,否则需要在外面等待。每个读者可看成一个进程。 semaphore seats; seats.value=100; while(阅览时间) { wait(seats); 进入阅览室; 阅读; 离开阅览室; signal(seats); } 4.3司机与售票员 while(上班时间) { 发动汽车; 正常运行; 到站停车; } while(上班时间) { 关闭车门; 售票; 打开车门; } 4.4两个并发进程的读写 设有一个缓冲区buffer,大小为一个字节(如图)。Compute进程不断产生字符,送buffer,Print进程从buffer中取出字符打印。如不加控制,会出现多种打印结果,这取决于这两个进程运行的相对速度。在这众多的打印结果中,只有Compute和Print进程的运行刚好匹配的一种是正确的,其它均为错误。 semaphore S_Empty; // 缓冲区是否为空,初值为1 semaphore S_Full; // 是否有数据写入,初值为0 while(计算未完成) { P(S_Empty); Write_Data( ); V(S_Full); } Compute while(打印未完成) { P(S_Full); Print_Data( ); V(S_Empty); } Print 4.5有一个仓库,可以存放A和B 两种产品。要求:1)每次只能存入一种产品(A或B);2)-N
5.进程通信 低级通信:只能传递状态和整数值(控制信息),包括用来实现进程同步和互斥的信号量和管程机制。优点是速度快。缺点是: 传送信息量小:每次通信传递的信息量固定,若需要传递较多信息,就得进行多次通信。 编程复杂:用户需要直接去实现通信的细节,编程复杂,容易出错。 高级通信:能够传送任意数量的数据,包括三类:共享内存、管道、消息。
6.线程定义及实现 进程当中的一条执行流程叫线程。 进程是资源分配单位,线程是CPU调度单位; 进程拥有一个完整的资源平台,而线程只独享必不可少的资源,如寄存器和栈; 线程同样具有就绪、阻塞和执行三种基本状态,同样具有状态之间的转换关系; 线程 = 轻量级进程(lightweight process) 用户线程:在用户空间实现,时间片分配给进程; 内核线程:在内核中实现,时间片分配给线程;