正文 操作系统 拾年之璐 V管理员 /2022年 /472 阅读 0706 ## 局部性原理 局部性原理是指程序在执行的时候呈现出局部性的规律,即在一段连续的时间内,整个程序的执行仅限于程序中的某一部分。相应的,执行所访问的存储空间也仅限于某个内存空间。局部性原理又表现为:时间局部性和空间局部性。时间局部性是指如果程序中的某条指令一旦执行,则不久之后该指令可能再次被执行(循环语句);空间局部性是指一旦程序**访问**了某个存储单元,则不久之后,其附近的存储单元也将被访问。 ## 系统调用 先了解**用户态**和**系统态** 1. 用户态(user mode) : 用户态运行的进程可以直接读取用户程序的数据。 2. 系统态(kernel mode):可以简单的理解系统态运行的进程或程序几乎可以访问计算机的任何资源,不受限制。 我们运行的程序基本都是运行在用户态 , 凡是与系统态级别的资源有关的操作(如文件管理、进程控制、内存管理等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。 - 设备管理。完成设备的请求或释放,以及设备启动等功能。 - 文件管理。完成文件的读、写、创建及删除等功能。 - 进程控制。完成进程的创建、撤销、阻塞及唤醒等功能。 - 进程通信。完成进程之间的消息传递或信号传递等功能。 - 内存管理。完成内存的分配、回收以及获取作业占用内存区大小及地址等功能。 ## 进程有几种状态 - 创建状态 - 就绪状态 - 运行状态 - 阻塞状态 - 结束状态 ## 进程间的通信方式 - 管道/匿名管道 - 有名管道 - 信号 - 消息队列 - 信号量 - 共享内存 - 套接字 ## 线程间的同步的方式 1. **互斥量(Mutex)**:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。比如 Java 中的 synchronized 关键词和各种 Lock 都是这种机制。 2. **信号量(Semphares)** :它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。 3. **事件(Event)** :Wait/Notify:通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。 ## 进程的调度算法 - **先到先服务(FCFS)调度算法** : 从就绪队列中选择一个最先进入该队列的进程为之分配资源,使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用 CPU 时再重新调度。 - **短作业优先(SJF)的调度算法** : 从就绪队列中选出一个估计运行时间最短的进程为之分配资源,使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用 CPU 时再重新调度。 - **时间片轮转调度算法** : 时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法,又称 RR(Round robin)调度。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。 - **多级反馈队列调度算法** :前面介绍的几种进程调度的算法都有一定的局限性。如**短进程优先的调度算法,仅照顾了短进程而忽略了长进程** 。多级反馈队列调度算法既能使高优先级的作业得到响应又能使短作业(进程)迅速完成。,因而它是目前**被公认的一种较好的进程调度算法**,UNIX 操作系统采取的便是这种调度算法。 - **优先级调度** : 为每个流程分配优先级,首先执行具有最高优先级的进程,依此类推。具有相同优先级的进程以 FCFS 方式执行。可以根据内存要求,时间要求或任何其他资源要求来确定优先级。 ### 什么是死锁 多个进程/线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于进程/线程被无限期地阻塞,因此程序不可能正常终止。 ## 死锁的四个条件 - **互斥**:资源必须处于非共享模式,即一次只有一个进程可以使用。如果另一进程申请该资源,那么必须等待直到该资源被释放为止。 - **占有并等待**:一个进程至少应该占有一个资源,并等待另一资源,而该资源被其他进程所占有。 - **非抢占**:资源不能被抢占。只能在持有资源的进程完成任务后,该资源才会被释放。 - **循环等待**:有一组等待进程 `{P0, P1,..., Pn}`, `P0` 等待的资源被 `P1` 占有,`P1` 等待的资源被 `P2` 占有,......,`Pn-1` 等待的资源被 `Pn` 占有,`Pn` 等待的资源被 `P0` 占有。 ## 解决死锁的方法 - **预防** 是采用某种策略,**限制并发进程对资源的请求**,从而使得死锁的必要条件在系统执行的任何时间上都不满足。一般比较实用的 **预防死锁的方法**,是通过考虑破坏第二个条件和第四个条件 - **避免**则是系统在分配资源时,根据资源的使用情况**提前做出预测**,从而**避免死锁的发生** - **检测**是指系统设有**专门的机构**,当死锁发生时,该机构能够检测死锁的发生,并精确地确定与死锁有关的进程和资源。 - **解除** 是与检测相配套的一种措施,用于**将进程从死锁状态下解脱出来**。 ## 常见的几种内存管理机制 1. **块式管理** : 远古时代的计算机操系统的内存管理方式。将内存分为几个固定大小的块,每个块中只包含一个进程。如果程序运行需要内存的话,操作系统就分配给它一块,如果程序运行只需要很小的空间的话,分配的这块内存很大一部分几乎被浪费了。这些在每个块中未被利用的空间,我们称之为碎片。 2. **页式管理** :把主存分为大小相等且固定的一页一页的形式,页较小,相对相比于块式管理的划分力度更大,提高了内存利用率,减少了碎片。页式管理通过页表对应逻辑地址和物理地址。 3. **段式管理** : 页式管理虽然提高了内存利用率,但是页式管理其中的页实际并无任何实际意义。 段式管理把主存分为一段段的,段是有实际意义的,每个段定义了一组逻辑信息 4. **段页式管理机制** : 段页式管理机制结合了段式管理和页式管理的优点。简单来说段页式管理机制就是把主存先分成若干段,每个段又分成若干页,也就是说 **段页式管理机制** 中段与段之间以及段的内部的都是离散的。 ## 快表和多级页表 快表 : 虚拟地址到物理地址的转换要快。 多级页表 : 解决虚拟地址空间大,页表也会很大的问题 ## CPU 寻址了解吗?为什么需要虚拟地址空间? 1. 用户程序可以访问任意内存,寻址内存的每个字节,这样就很容易(有意或者无意)破坏操作系统,造成操作系统崩溃。 2. 想要同时运行多个程序特别困难 本文采用创作共用版权 CC BY-NC-SA 3.0 CN 许可协议,转载或复制请注明出处! -- 展开阅读全文 --