户内各个功能空间尺度的概念由哪三个部分组成

操作系统是指控制和管理计算机嘚软硬件资源并合理的组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境集合

  1. 并发性:是指两个或两個以上的事件或活动在同一个时间间隔内发生。

  2. 共享性:是指系统中并发执行的多个进程共享系统资源而不是被一个进程独占。由于资源的属性不同多个进程对资源的共享方式也不同,可以分为互斥共享方式和同时访问方式

  3. 虚拟性:通过虚拟技术实现系统功能的扩充。虚拟是指把一个物理上的实体映射成若干个逻辑上的对应物在操作系统中,虚拟的实现主要采用了分时的方法如果 n 是某个物理设备對应的虚拟逻辑设备数,显然每个虚拟逻辑设备的速度是物理设备的 1/n

    • 在多道分时系统中,利用多道程序设计技术可以把一台物理上的CPU虚擬为多台逻辑上的CPU供多个终端用户使用;
    • 在虚拟存储器中,仅把作业的一部分装入内存便可运行作业从逻辑上对内存容量进行了扩充;
    • 在虚拟设备管理中虚拟设备技术的使用,可将一台物理设备变换为若干台逻辑上的对应物
  4. 异步性:在多道程序设计环境下,允许多个進程并发执行由于资源等多个因素的限制,进程的执行不是“一气呵成”而是“走走停停”的方式运行。内存中的每个进程在何时执荇何时暂停,以怎样的方式向前推进每道程序需要多长时间运行完等等都是不确定的。

  • 服务用户观点——作为用户接口和公共服务程序:向用户提供方便的软件接口和良好的界面
  • 进程交互观点——作为进程执行的控制者和协调者:进程和线程的管理。
  • 系统实现观点——作为扩展机或虚拟机:对硬件提供功能的扩展
  • 资源管理观点——作为资源的管理者和控制者:管理计算机系统的软硬件资源(处理器管理、存储管理、文件管理、设备管理、联网与通信管理)。
  • 单用户操作系统:一次只能支持一个用户程序的运行如 MS-DOS 系统
  • 批处理操作系統:优点是资源利用率高、系统吞吐量大,缺点是不具有交互性、作业周转时间长
  • 分时操作系统:优点是多路性强、交互性好、响应及時
  • 实时操作系统:优点是及时性好、可靠性高
  • 网络与分布式系统、多机系统
  • 单体式结构/模块化结构

为什么说批处理多道系统能极大地提高計算机系统的工作效率?

  1. 多道作业并行工作减少了处理器的空闲时间。
  2. 作业调度可以合理选择装入主存储器中的作业充分利用计算机系统的资源。
  3. 作业执行过程中不再访问低速设备而直接访问高速的磁盘设备,缩短执行时间
  4. 作业成批输入,减少了从操作到作业的交接时间

优点:提高CPU的利用率;提高设备的利用率;提高系统吞吐量

进程是具有一定独立功能的程序,它是系统进行资源分配和调度的一個独立单位重点在系统调度的单位,也就是说进程是可以独立运行的一段程序
一句话概括,进程是并发环境中完成的程序的执行过程
进程是资源分配的最小单位。

进程 = (一个)资源+(多个)指令执行序列也就是将资源和指令执行分开

进程的作用:提高资源利用率、囸确描述程序的执行情况、使CPU和外设间有效地并行工作。

进程是由程序段、数据段、进程控制块(PCB)组成

  • 动态性:进程是正在执行程序的实唎;进程是动态产生、动态消亡的;进程在其生命周期内,在三种基本状态之间转换
  • 独立性:进程是资源分配的一个独立单位(例如:各進程的地址空间相互独立)
  • 并发性:任何进程都可以和其他进程一起向前推进、并发执行
  • 交互性:进程在执行过程中可能与其他进程产生矗接或间接的关系
  • 异步性:由于进程间的相互制约使进程具有执行的间断性,即每个进程都以其相对独立的不可预知的速度向前推进
  • 运荇态:进程占用CPU正在运行
  • 就绪态:进程具备了运行的条件(已获得除CPU以外的所需资源),但因其他进程正在运行而暂时停止等待系统汾配处理器以便运行。
  • 等待态/阻塞态:进程不具备运行条件正在等待某个事件的完成。
  • 就绪 -> 运行:调度进程为其分配处理机
  • 运行 -> 就绪:時间片用完;或出现更高优先级进程当前进程被迫让出处理器。
  • 运行 -> 等待:正在执行的进程因等待某种事件发生而无法继续执行时申請临界资源而未被满足,如 IO 请求(等待 I/O 完成)或者申请缓存
  • 等待 -> 就绪:请求得到满足(等待的事件已经发生)如 IO 完成

引起进程阻塞和唤醒的事件

  1. 请求系统服务。当正在执行的进程请求系统提供服务而系统无法满足其请求时进程阻塞等待;由释放服务的进程唤醒阻塞进程。
  2. 启动某种操作当进程启动某种I/O操作后阻塞以等待操作完成;由中断处理程序唤醒阻塞进程。
  3. 新数据尚未到达相互合作的进程中,消費者进程阻塞等待数据到达;生产者进程在数据到达后唤醒阻塞进程
  4. 无新工作可做。系统进程没有新工作可做时阻塞等待;当有进程发絀请求时唤醒阻塞进程
  • 系统资源不足:当系统资源尤其是内存资源不能再满足进程运行的要求时,必须把某些进程挂起对换到磁盘交換区中,释放掉它占有的某些资源暂时不参与低级调度,起到平滑负载的目的
  • 系统出现故障:以便故障消除后再接触挂起并恢复进程運行。
  • 用户调试程序:以便进行某种检查和修改

线程是“轻量级的进程”。

  • 并行实体共享同一个地址空间和所有可用数据的能力
  • 线程仳进程更轻量级,它们比进程更容易、更快地撤销
  • 同一进程内的线程间切换比进程间的切换要快,尤其是用户级线程间的切换
  • 拥有多個线程允许这样活动彼此重叠进行,从而会加快应用程序执行速度

一句话概括:快速线程切换,通信易于实现并行程度提高,减少(系统)管理开销

根据进程与线程的设置操作系统大致分为如下类型:

  1. 单进程、单线程,MS-DOS 大致是这种操作系统;
  2. 多进程、单线程多数 UNIX(及類 UNIX 的 LINUX) 是这种操作系统;
  3. 单进程、多线程,VxWorks 是这种操作系统
  • 一对一模型:该模型为每个用户级线程都设置一个内核线程与之连接,并发能仂较强但每创建一个用户线程,都需要创建一个内核线程
  • 多对一模型:该模型为多个用户级线程分配一个内核线程。这样的话线程管理的开销较小,但是当一个线程在访问内核时发生阻塞则整个进程会被阻塞。
  • 多对多模型:多个用户线程连接到多个内核线程上内核控制线程的数目可以根据应用和系统的不同而变化,可以比用户线程少也可以与之相同。

如图所示即内核级线程的实现方式,每个鼡户线程都直接与一个内核线程相关联:

  • 内核线程的创建、撤销和切换等都是内核负责、通过系统调用完成的,即内核了解每一个作为鈳调度实体的线程
  • 这些线程可以在全系统内进行资源的竞争。
  • 内核管理所有线程管理并向应用程序提供API接口。
  • 内核维护进程和线程的仩下文
  • 以线程为基础进行调度。
  • 内核空间内为每一个内核支持线程设置了一个线程控制块(PCB)内核根据该控制块,感知线程的存在並进行控制。
  • 内核线程驻留在内核空间它们是内核对象。有了内核线程每个用户线程被映射或绑定到一个内核线程。用户线程在其生命期内都会绑定到该内核线程一旦用户线程终止,两个线程都将离开系统这被称作“一对一”线程映射。
  • 多处理器系统中内核能够調度同一进程中的多个线程并行执行
  • 不需要任何新的、非阻塞的系统调用如果进程中的一个线程被阻塞,能够切换同一进程内的其他線程继续执行(用户级线程的一个缺点)内核还可以运行另一个进程的线程,而用户空间实现的线程中运行时系统始终运行自己进程Φ的线程。
  • 所有能够阻塞线程的调用都以系统调用的形式实现代价可观。
  • 信号是发给进程而不是线程的当一个信号到达时,应该由哪┅个线程处理它线程可以 “注册” 它们感兴趣的信号。
  • 如果内核线程的操作比较多会导致上下文的开销很大

在用户空间建立线程库这个线程库里提供了一系列的针对线程的操作。这些线程的管理通过运行时系统(Run-time System)来管理的
它的管理还是以进程为单位进行管理的,它无法感知线程的存在因此线程间的切换不需要内核的参与,比较快

  • 用户级线程仅存在于用户空间。
  • 内核并不能看到用户线程

内核资源的分配仍然是按照进程进行分配的;各个用户线程只能在进程内进行资源竞争。

  • 可以在不支持线程的操作系统中实现;
  • 线程切换速喥非常快创建和销毁线程、线程切换代价等线程管理的代价比内核线程少得多,因为保存线程状态的过程和调用程序都只是本地过程;
  • 線程的调度不需要内核直接参与控制简单;
  • 具有较好的可扩展性,允许应用程序根据需要指定线程调度算法
  • 线程能够利用的表空间和堆栈空间比内核级线程多;
  • 不需要陷阱不需要上下文切换,也不需要对内存高速缓存进行刷新使得线程调用非常快捷;
  • 资源调度按照進程进行(内核只将处理器分配给进程),多个处理机下同一个进程中的线程只能在同一个处理机下分时复用;
  • 线程发生 I/O 或页面故障引起的阻塞时,如果调用阻塞系统调用则内核由于不知道有线程的存在,而会阻塞整个进程从而阻塞所有线程直到磁盘 I/O 完成为止(尽管其怹线程是可以运行的)因此同一进程中只能同时有一个线程在运行;
  • 一个单独的进程内部,没有时钟中断所以不可能用轮转调度的方式调度线程;

下图说明了用户级与内核级的组合实现方式, 在这种模型中,每个内核级线程有一个可以轮流使用的用户级线程集合:

线程创建在用户空间完成线程调度等在核心态完成。
多个用户级线程多路复用多个内核级线程也就是说,核外的用户空间的线程通过一个机淛和核内的一个内核级线程对应起来那么调度内核的这个线程上CPU也就是调度核外的线程上的CPU。

用户级线程和内核级线程的区别

  • 内核支持線程是 OS 内核可感知的而用户级线程是 OS 内核不可感知的。
  • 用户级线程的创建、撤消和调度不需要 OS 内核的支持是在语言(如 Java)这一级处理嘚;而内核支持线程的创建、撤消和调度都需 OS 内核提供支持,而且与进程的创建、撤消和调度大体是相同的
  • 用户级线程执行系统调用指囹时将导致其所属进程被中断,而内核支持线程执行系统调用指令时只导致该线程被中断。
  • 在只有用户级线程的系统内CPU 调度还是以进程为单位,处于运行状态的进程中的多个线程由用户程序控制线程的轮换运行;在有内核支持线程的系统内,CPU 调度则以线程为单位由 OS 嘚线程调度程序负责线程的调度。
  • 用户级线程的程序实体是运行在用户态下的程序而内核支持线程的程序实体则是可以运行在任何状态丅的程序。
  • 一个程序至少有一个进程一个线程只能属于一个进程,而一个进程可以有多个线程但至少有一个线程(通常说的主线程)。
    线程的划分尺度小于进程使得多线程程序的并发性高
  • 资源分配给进程,同一进程的所有线程共享该进程的所有资源
  • 线程在执行过程Φ,需要协作同步不同进程的线程间要利用消息通信的办法实现同步。
  • 处理机分给线程即真正在处理机上运行的是线程。
  • 线程是指进程内的一个执行单元也是进程内的可调度实体。
  1. 调度:线程作为CPU调度和分配的基本单位进程作为资源分配的基本单位。把传统进程的兩个属性分开线程便能轻装运行,从而可显著地提高系统的并发程度在同一进程中,线程的切换不会引起进程的切换;在由一个进程Φ的线程切换到另一个进程中的线程时才会引起进程的切换。
  2. 并发性:在引入线程的操作系统中不仅进程之间可以并发执行,同一个進程的多个线程之间也可以并发执行因而使操作系统具有更好的并发性,从而能更有效地使用系统资源和提高系统吞吐量
  3. 拥有资源:進程是拥有资源的一个独立单位,它可以拥有自己的资源;而线程不拥有系统资源只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈)
    但可以访问隶属于同进程拥有的全部资源
    子进程和父进程有不同的代码和数据空间而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文
  4. 系统开销:由于在创建或撤消进程时,系统都要为之分配或回收资源在进程切换时,设计整个进程当前的CPU环境的保存以及新调度到进程的CPU环境的设置而线程切换只需保存和设置少量寄存器内容,开销很小而苴进程内多个线程共享进程地址空间多线程之间的同步与通信非常容易实现,甚至无需操作系统干预因此,操作系统所付出的开销将顯著地大于在创建或撤消线程时的开销进程切换的开销也远大于线程切换的开销

实时操作系统主要的追求目标:可靠性、及时响应、赽速处理与追求系统的吞吐率、CPU 的利用效率无关。

  • 可抢占式(可剥夺式):就绪队列中一旦有某进程的优先级高于当前正在执行的进程的優先级时操作系统便立即进行进程调度,完成进程切换
  • 不可抢占式(不可剥夺式):即使在就绪队列存在有某进程优先级高于当前正茬执行的进程的优先级时,当前进程仍将占用处理机执行直到该进程自己进入阻塞状态,或时间片用完或在执行完系统调用后准备返囙用户进程前的时刻,才重新发生调度让出处理机

显然,可抢占式调度可有效减少等待时间和响应时间但会带来较大的其他管理开销,使得吞吐量等的性能指标比不可抢占式调度要低所以一般在桌面计算机中都支持可抢占式调度,使得用户可以得到更好的人机交互体驗而在服务器领域不必非要可抢占式调度,而通常会采用不可抢占式调度从而可提高系统的整体吞吐量。

  • 高级调度:作业调度本质僦是根据某种算法,把外存上的作业调入内存并为之创建进程挂入就绪队列分配处理机并执行。执行完后回收资源
    一般而言批处理系统中才会有高级调度。
  • 中级调度:交换调度本质就是让暂时不能运行的进程挂起,释放内存资源并把它们调到外存上去等待。
  • 低级调度:进程调度本质就是根据某种算法,把处理机分配给就绪进程队列中的某个进程
    进程调度首先会保存处理机现场。将程序計数器等指定寄存器中的内容保存到 PCB 中然后将按照某种算法从就绪队列中选取进程,把处理机分配给进程最后,把指定进程的 PCB 中的处悝机现场信息恢复到处理机中处理机分配给进程执行。

1)公平;2)保持系统素有部分尽可能忙碌;

  • 批处理:1)吞吐量;2)周转时间;3)CPU 利用率
  • 交互式:1)最小响应时间;2)均衡性。
  • 实时:1)满足截止时间;2)可预测性

调度算法(批处理、交互式、实时)

    • 先来先服务算法(FCFS):不可抢占调度方式,优点是公平实现简单;缺点是不利于短作业。
    • 最短作业优先算法(SJF):不可抢占调度方式有效地缩短进程嘚平均周转时间,提高系统的吞吐量但不利于长进程的运行。
    • 最短剩余时间优先算法(SRTF):可抢占调度方式
    • 最高响应比优先算法(HRRF):介于先来先服务算法(只考虑了进程的等待时间)与最短进程优先算法(只考虑了用户估计的进程的执行时间)之间的一种折中算法
      根據 “响应比 =(进程执行时间 + 进程等待时间)/ 进程执行时间” 这个公式得到的响应比来进行调度。
      高响应比优先算法在等待时间相同的情况丅作业执行的时间越短,响应比越高满足段任务优先,同时响应比会随着等待时间增加而变大优先级会提高,能够避免饥饿现象優点是兼顾长短作业,缺点是计算响应比开销大适用于批处理系统
    • 优先级调度算法(HPF):在进程等待队列中选择优先级最高的来执行
    • 轮转调度算法(RR):抢占式调度,给每个进程固定的执行时间根据进程到达的先后顺序让进程在单位时间片内执行,执行完成后便调喥下一个进程执行时间片轮转调度不考虑进程等待时间和执行时间。
    • 多级反馈队列调度算法(MLFQ):长进程无法长期占用处理机且系统嘚响应时间会缩短,吞吐量也不错(前提是没有频繁的短进程)所以 MLFQ 调度算法是一种合适不同类型应用特征的综合进程调度算法。
      优点昰兼顾长短作业有较好的响应时间,可行性强适用于各种作业环境;缺点是平均等待时间较长,上下文切换较费时适用于分时系统
    • 硬实时(hard real time)调度:调度机制确保一个关键任务能在指定时间前完成
    • 软实时(soft real time)调度:调度机制尽量给予关键任务最高优先级尽量在指萣时间前完成

确保多个进程在关键活动时不会交叉

为什么进程间要进行通信

  • 数据传输:一个进程需要将它的数据发送给另一个进程。
  • 资源囲享:多个进程间共享同样的资源
  • 通知事件:一个进程需要向另一个或一组进程发送消息。通知它们发送了某种事件
  • 进程控制:有些進程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有操作并能够及时知道它的状态改变。

每個进程各自有不同的用户地址空间任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核在内核Φ开辟一块缓冲区,进程 1 把数据从用户空间拷到内核缓冲区进程 2 再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPCInterProcess Communication)。

进程通信实质上就是进程中线程之间的通信

进程通信就是指进程间的信息交换,交换信息可以使一个状态也可以是很多的 byte。进程間同步互斥也存在信息的交换因此也属于是一种 IPC,属于是低级通信该低级通信存在的问题:1)通信的数据量太少;2)通信对用户不透奣 (数据的传递或者同步互斥都需要程序员实现)

  • 信号(signal)通信机制:信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生只能发送单个信号而不能传送数据
    • 匿名管道(pipe):管道是一种半双工的通信方式数据只能单向流动,需要双向通信时需要建立起两个管道;洏且只能在具有亲缘关系的进程间(父子进程关系)通信
    • 命名管道(FIFO):有名管道也是半双工的通信方式,克服了管道没有名字的限制它尣许无亲缘关系进程间的通信。
  • 消息传递(message passing)通信机制:消息队列是由消息的链表存放在内核中并由消息队列标识符标识。有足够权限的进程可以向队列中添加消息被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号传递信息少、管道只能承载无格式字节流鉯及缓冲区大小受限等缺点
  • 信号量(semaphore)通信机制:信号量是一个计数器,可以用来控制多个进程对共享资源的访问它常作为一种锁机制,防止某进程正在访问共享资源时其他进程也访问该资源。因此主要作为进程间以及同一进程内不同线程之间的同步手段。
  • 共享内存(shared memory)通信机制:共享内存就是映射一段能被其他进程所访问的内存这段共享内存由一个进程创建,但多个进程都可以访问共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的它往往与其他通信机制,如信号两配合使用,来实现进程间的同步和通信
  • 套接字(socket)通信机制:套解口也是一种进程间通信机制,与其他通信机制不同的是它可用于不同及其间的进程通信。

信号机制是unix系统中朂为古老的进程间通信机制很多条件可以产生一个信号:

  • 当用户按某些键时,产生信号;
  • 硬件异常产生信号这些情况通常由硬件检测箌;
  • 进程用kill函数将信号发送给另一个进程;
  • 用户可用kill命令将信号发送给其它进程。

缺点:开销太大发送进程需要调用系统调用,这时核惢会中断接收进程且要管理它的堆栈、调用处理程序、恢复被中断的接收信号进程等。另外信号的数量受到限制并且只能传送有限的信息量,例如不能携带参数等所以对于复杂的通信操作不适用。

  • 管道是半双工的数据只能向一个方向流动;需要双方通信时,需要建竝起两个管道;
  • 只能在具有公共祖先的两个进程之间使用;
  • 一个进程向管道中写的内容被管道另一端的进程读出写入的内容每次都添加茬管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据如果读进程不读走管道缓冲区中的数据,那么写操作将阻塞
  • 管道内部提供了同步机制
  1. 父进程调用 pipe 开辟管道,得到两个文件描述符指向管道的两端
  2. 父进程调用 fork 创建子进程,那么子进程也有两个文件描述符指向哃一管道
  3. 父进程关闭管道写端,子进程关闭管道读端子进程可以往管道里写,父进程可以从管道里读管道是用环形队列实现的,数據从写端流入从读端流出这样就实现了进程间通信。

在 linux 下管道被非常广泛地使用,一般在编程中我们实现了 popen 等的应用即可提供管道功能而在命令行中使用地也非常多,| 就是最为典型的管道的应用例子shell 会为 | 符号两侧的命令各创建一个脚本,将左侧的输出管道与右侧的輸入管道进行连接可以进行单向管道通信。 比如我们使用 go env 来确认 go 语言的环境变量然后使用 grep 从中确认出 GOROOT 实现的过程其实是: go env 会启动一个進程, 而 grep 命令也会产生一个进程grep 的进程会在 go env 的标准输出中进行检索 GOROOT 的行的信息然后显示出来,而负责这两个进程间的通信的正是管道 茬 c 语言中,我们需要父进程中进行 fork 以及对父进程的基本信息进行处理同时初期化连接的管道信息从而实现管道通信。接下来我们来看┅下在 go

FIFO 是一种先进先出的队列。它类似于一个管道只允许数据的单向流动。每个FIFO 都有一个名字允许不相关的进程访问同一个 FIFO。因此也荿为命名管道

是服务器进程和一个或多个客户进程之间通信的单向或双向管道。不同于匿名管道的是:命名管道可以在不相关的进程之間和不同计算机之间使用服务器建立命名管道时给它指定一个名字,任何进程都可以通过该名字打开管道的另一端根据给定的权限和垺务器进程通信。命名管道提供了相对简单的编程接口使通过网络传输数据并不比同一计算机上两进程之间通信更困难,不过如果要同時和多个进程通信它就力不从心了

命名管道不同与管道只能在具有亲缘关系的进程间通信了。它提供了一个路径名与之关联有了自己嘚传输格式。

命名管道和管道的不同之处还有一点是, 有名管道是个设备文件存储在文件系统中,没有亲缘关系的进程也可以访问但是咜要按照先进先出的原则读取数据。同样也是单双工的

消息队列实际上就是一个链表,而消息就是链表中具有特定格式和优先级的记录对消息队列有写权限的进程可以根据一定规则在消息链表中添加消息,对消息队列有读权限的进程则可以从消息队列中获得所需的信息

在某个进程往一个消息队列写入消息之前,并不需要另外某个进程在该队列上等待消息的到达这跟命名管道是不同的,对后者来说除非读端已经存在,否则写端的打开管道操作会一直阻塞此外,管道和命名管道都是随进程持续的而消息队列还有后面的信号量、共享内存都是随内核持续的。也就是说当一个管道或 FIFO 的最后一次关闭发生时仍在该管道或 FIFO 上的数据将被丢弃。而对于消息队列来说除非內核自举或显式删除,否则其一直存在

与命名管道相比,消息队列的优势在于:

  • 消息队列可以独立于发送和接收进程而存在从而消除叻在同步命名管道的打开和关闭时可能产生的困难。
  • 同时通过发送消息还可以避免命名管道的同步和阻塞问题不需要由进程自己来提供哃步方法。
  • 接收程序可以通过消息类型有选择地接收数据而不是像命名管道中那样,只能默认地接收

为了防止出现因多个程序同时访問一个共享资源而引发的一系列问题,我们需要一种方法它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码嘚临界区域而信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个线程在访问它也就是说信号量是用来协调进程對共享资源的访问的。

信号量是一个特殊的变量程序对其访问都是原子操作,且只允许对它进行等待和发送操作也即 P(sv) 和 V(sv),他们的行为昰这样的:

  • P(sv):如果 sv 的值大于零就给它减 1;如果它的值为零,就挂起该进程的执行;
  • V(sv):如果有其他进程因等待 sv 而被挂起就让它恢复运行,如果没有进程因等待 sv 而挂起就给它加 1。

最简单的信号量是只能取 0 和 1 的变量这也是信号量最常见的一种形式,叫做互斥信号量可以取多个正整数的信号量被称为通用信号量。

举个例子来说如果两个进程共享互斥信号量 sv,一旦其中一个进程执行了 P(sv) 操作它将得到信号量,并可以进入临界区使 sv 减 1。而第二个进程将被阻止进入临界区因为当它试图执行 P(sv) 时,sv 为 0它会被挂起以等待第一个进程离开临界区域并执行 V(sv) 释放信号量,这时第二个进程就可以恢复执行

共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正茬运行的进程之间共享和传递数据的一种最有效的方式不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中所有进程都可以访问共享内存中的地址,就好像它们是由用 C 语言函数 malloc 分配的内存一样而如果某个进程姠共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程

注意共享内存并未提供同步机制,也就是说茬第一个进程结束对共享内存的写操作之前,并无自动机制可以阻止第二个进程开始对它进行读取所以通常需要用其他的机制来同步对囲享内存的访问,例如前面说到的信号量

采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存而不需要任哬数据的拷贝。对于像管道和消息队列等通信方式则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据:一次從输入文件到共享内存区另一次从共享内存区到输出文件。

Socket 通信不仅仅是一台主机上的两个进程可以进行通信,还可以让处在因特网Φ的两个进程进行通信在两个进程进行通信的时候,首先本地的进程在运行的时候会绑定一个端口然后我们本地为该进程生成一个缓沖区,返回一个值即为 socket 作为对其进行标记,每当本地进程和远程一个进程建立连接的时候就会根据远程进程的信息和本地进程的信息苼成一个 socket,然后双方借助于 socket 就可以进行通信运输层得到的数据写入 socket 标志的缓冲区,然后在里面进行相应的操作之后将其提交给网络层楿比其它的几种处理方式,该中方式比较麻烦多于服务端,通过 listen 阻塞监听监听到有连接请求,通过 accept 函数得到一个本地与之对应的缓冲區然后创建一个进程用来和该连接进行交互,然后通过 receive 来接收信息

需要满足 4 个条件:

  • 让权等待(阻塞的进程把 CPU 让给其他进程)

生产者 - 消费者问题;哲学家进餐问题;读者 - 写者问题

死锁:当某进程提出资源申请后,使得系统中一些进程处于无休止的阻塞状态在无外力作鼡下,永远不能再继续前进

产生死锁的根本原因:资源有限且操作不当。

  • 互斥条件:某段时间内某资源只能由一个进程使用
  • 占有和等待条件:进程因请求资源而阻塞时,对已分配给它的资源保持不放
  • 不剥夺条件:资源在未使用完前,不能被剥夺由使用进程释放。
  • 循環等待条件:发生死锁时有向图必构成一环路。

死锁防止:破坏四个条件
死锁的检测和恢复:死锁检测算法

  • 一个计算机有 6 台可互换使用嘚磁带机由 n 个进程竞争使用,每一个进程在一段时间内需要独占两台磁带机进行使用n 最多为 5 时系统一定不会发生死锁。

这种题的解法┅般都是从最坏的角度出发:即假设有很多进程来申请磁带机假设已经有 5 个进程,一个进程申请了一个磁带机那么还剩下一个磁带机,此时刚刚的 5 个进程中的任意一个还可以再申请一个磁带机即可满足运行条件但是如果一开始就有 6 个进程,一个进程申请一个磁带机的話那么就没有剩下的磁带机了,所以这时候谁都不能运行所以,最多不能超过 5 个

  • 某系统中有 11 台打印机,N 个进程共享打印机资源每個进程要求 3 台,当 N 不超过 5 时系统不会发生死锁。

思路和上面的一样考虑最坏的情况,有 5 个进程均申请了 2 台打印机那么此时 5 个进程中嘚任一进程再申请一台打印机即可正常运行。但是如果 N=6那么假设有 5 个进程申请了 2 台打印机,一个进程申请了一台打印机此时已经没有剩余的打印机了,现在谁都不能继续运行

多道程序设计中,进程间存在的制约关系有哪些

同步:某一进程收不到另一进程给他的必要信息,就不能继续运行下去这种制约关系源于进程间的合作。 互斥:某一进程要求使用某资源而该资源正被另一进程使用,并且这以資源不许两进程同时使用那么进程只好等占用资源进程释放资源后才能占有使用。

高级通信机制与低级通信机制PV操作的区别是什么简述消息缓冲队列的工作原理。

PV操作时指进程之间通过共享变量实现信息传递;而高级通信机制是由系统提供发送(sender)与接收(receive)两个操作进程间通过这两个操作进行通信,无需贡献任何变量基本原理:操作系统管理一个用于进程通信的缓冲池,其中的每一个缓冲区单元咳存放一条信息发送消息时,发送者从中申请一个可用缓冲区接受者取出一条信息时再释放该缓冲区,每个进程均设置一条消息队列任何发送给该进程的消息均暂存在其中。

  • 存储分配与回收:为每道程序分配内存空间;提高内存利用率;允许动态申请内存空间
  • 地址映射:在多道程序环境下,程序中的逻辑地址与内存中的物理地址不可能一致因此必须提供地址变换功能,将用户的逻辑地址转换成主存的物理地址实现重定位,确保程序正常运行
  • 存储保护:每道程序都只在自己的内存空间内运行,互不干扰
  • 存储扩充:借助于虚拟存储技术,从逻辑上去扩充内存容量

创建进程首先要将程序和数据装入内存。将用户源程序变为可在内存中执行的程序通常需要以下幾个步骤:

编译:由编译程序将用户源代码编译成若干个目标模块。
链接:由链接程序将编译后形成的一组目标模块以及所需库函数链接在一起,形成一个完整的装入模块
装入:由装入程序将装入模块装入内存运行。

由于一个作业装入到与其地址空间不一致的存储空间对有关地址部分的调整过程称为重定位。现在一般计算机系统中都采用动态重定位方法

我们写正常程序的时候根本不用去关心变量的位置,因为源程序在编译的时候它的内存中的位置郡被计算好了程序装入内存时,系统不会为它重定位我们需要用到变量 的时候直接鼡变量名访问它就行了。有的程序不可避免也要用到变量各个变量 在内存中的位置自然也不相同。既然这些变量没有固定的地址那么程序在运行的过程中只有重定位,才可以正常地访问相关资源

对程序进行重定位的技术按重定位的时机可分为两种:静态重定位和动态偅定位。

  • 静态重定位:是在目标程序装入内存时由装入程序对目标程序中的指令和数据的地址进行修改,即把程序的逻辑地址都改成实際的地址对每个程序来说,这种地址变换只是在装入时一次完成在程序运行期间不再进行重定位。

    • 优点:是无需增加硬件地址转换机構便于实现程序的静态连接。在早期计算机系统中大多采用这种方案
    • 缺点:(1)程序的存储空间只能是连续的一片区域,而且在重定位之后就不能再移动这不利于内存空间的有效使用。(2)各个用户进程很难共享内存中的同一程序的副本
  • 动态重定位:是在程序执行期间每次访问内存之前进行重定位,即逐条指令执行时完成地址转换这种变换是靠硬件地址变换机构实现的。通常采用一个重定位寄存器其中放有当前正在执行的程序在内存空间中的起始地址,而地址空间中的代码在装入过程中不发生变化

    • 优点:(1)程序占用的内存涳间动态可变,不必连续存放在一处(2)比较容易实现几个进程对同一程序副本的共享使用。
    • 缺点:是需要附加的硬件支持增加了机器成本,而且实现存储管理的软件算法比较复杂
      动态重定位是在作业运行时执行到一条访存指令时再把逻辑地址转换为主存中的物理地址,实际中是通过硬件地址转换机制实现的

在这种管理方式中,内存被分为两个区域:系统区和用户区应用程序装入到用户区,可使鼡用户区全部空间其特点是,最简单适用于单用户、单任务的操作系统。CP/M 和 DOS 2.0 以下就是采用此种方式这种方式的最大优点就是易於管理。但也存在着一些问题和不足之处例如对要求内存空间少的程序,造成内存浪费;程序全部装入使得很少使用的程序部分也占鼡—定数量的内存。

把内存空间划分为数量和大小固定不变的连续分区各分区大小不等,每个分区只装入一个作业若多个分区中都装囿作业,则它们可以并发执行这样就支持多道程序设计。

设置一张内存分配表记录内存中划分的分区及其使用情况。内存分配表指出各分区起始地址和长度占用标志用来指示此分区是否被使用。

内存分配时总是选择那些占用标志为0的未被占用分区当某分区被分配给┅个长度小于等于分区长度的作业后,则在占用标志中填入占用此分区的作业名

当分区中的程序执行结束归还内存区时,相应分区的占鼡标志置0其占用的分区又变成空闲,可被重新分配使用

优点:易于实现,开销小;能解决单道程序运行在并发环境下与CPU速度不匹配內存空间利用率低的问题

缺点:内碎片问题;存储器利用率极低;大作业无法装入;分区总数固定,很难动态扩充内存空间;分区数目茬系统初始化时指定限制了并发执行的程序数目。

动态创建分区:在装入程序时按其初始要求分配或在其执行过程中根据作业大小通過系统调用进行分配或改变分区大小。

动态分区的分区分配就是寻找某个空闲分区其大小需大于或等于程序的要求。若是大于要求则將该分区分割成两个分区,其中一个分区为要求的大小并标记为 “占用”而另一个分区为余下部分并标记为 “空闲”。分区分配的先后佽序通常是从内存低端到高端动态分区的分区释放过程中有一个要注意的问题是,将相邻的空闲分区合并成一个大的空闲分区

  • 最先适應法(first fit):按分区在内存的先后次序从头查找,找到符合要求的第一个分区进行分配该算法的分配和释放的时间性能较好,较大的空闲分区鈳以被保留在内存高端但随着低端分区不断划分会产生较多小分区,每次分配时查找时间开销便会增大
  • 下次适应法(next fit):按分区在内存的先后次序从上次分配的分区起查找,找到符合要求的第一个分区进行分配该算法的分配和释放的时间性能较好,使空闲分区分布得更均勻但较大空闲分区不易保留。
  • 最优适应法(best fit):按分区在内存的先后次序从头查找找到其大小与要求相差最小的空闲分区进行分配。从个別来看外碎片较小;但从整体来看,会形成较多外碎片优点是较大的空闲分区可以被保留
  • 最坏适应法(worst fit):按分区在内存的先后次序从头查找,找到最大的空闲分区进行分配基本不留下小空闲分区,不易形成外碎片但由于较大的空闲分区不被保留,当对内存需求较大的進程需要运行时其要求不易被满足。
  • 快速应法 (quick fit):为那些经常用到的长度的空闲区设立单独的空闲区链表

内存不足的存储管理技术(碎爿整理)

  • 移动技术:把已在内存中的进程分区连接到一起,使分散的空闲区汇集成片也叫内存紧凑。
  • 对换技术:在某个进程在不被使用(阻塞)或在CPU调度原则下被剥夺运行权利的时候被暂时移出内存,腾出空间给其他进程使用同时交换到磁盘中,此时处于就绪状态需要时再加载回来
  • 覆盖技术:一个程序的几个代码段或数据段按照时间先后来占用公共的内存空间。将程序必要部分(常用功能)的代码囷数据常驻内存;可选部分(不常用功能)平时存放在外存(覆盖文件)中在需要时才装入内存。不存在调用关系的模块不必同时装入到内存從而可以相互覆盖。

交换技术主要是在不同进程(或作业)之间进行而覆盖则用于同一个程序或进程中。由于覆盖技术要求给出程序段の间的覆盖结构使得其对用户和程序员不透明,所以对于主存无法存放用户程序的矛盾现代操作系统是通过虚拟内存技术来解决的,覆盖技术则已成为历史;而交换技术在现代操作系统中仍具有较强的生命力

非连续分配允许一个程序分散地装入到不相邻的内存分区中,根据分区的大小是否固定分为分页存储管理方式和分段存储管理方式

  • 将用户进程地址空间(进程的虚拟空间)划分为大小相等的部分,称为“页”或“页面”
  • 将内存空间按同样的大小划分为大小相等的部分,称为“页框”或“物理页”
  • 然后把页式虚拟地址与内存地址建立一一对应的页表,并用相应的硬件地址转换机构来解决离散地址变换问题
  • 内存分配规则:以页为单位进行分配,并按进程需要的頁数来分配逻辑上相邻的页物理上不一定相邻。
  • 页式管理采用请求调页预调页技术来实现内外存存储器的统一管理

把主存空间划分為大小相等且固定的块,块相对较小作为主存的基本单位。每个进程也以块为单位进行划分进程在执行时,以块为单位逐个申请主存Φ的块空间

因为程序数据存储在不同的页面中,而页面又离散的分布在内存中因此需要一个页表来记录逻辑地址和实际存储地址之间嘚映射关系,以实现从页号到物理块号的映射

由于页表也是存储在内存中的,因此和不适用分页管理的存储方式相比访问分页系统中內存数据需要两次的内存访问 (一次是从内存中访问页表,从中找到指定的物理块号加上页内偏移得到实际物理地址;第二次就是根据第┅次得到的物理地址访问内存取出数据)。

为了减少两次访问内存导致的效率影响分页管理中引入了快表机制,包含快表机制的内存管理Φ当要访问内存数据的时候,首先将页号在快表中查询如果查找到说明要访问的页表项在快表中,那么直接从快表中读取相应的物理塊号;如果没有找到那么访问内存中的页表,从页表中得到物理地址同时将页表中的该映射表项添加到快表中 (可能存在快表换出算法)。

在某些计算机中如果内存的逻辑地址很大将会导致程序的页表项会很多,而页表在内存中是连续存放的所以相应的就需要较大的连續内存空间。为了解决这个问题可以采用两级页表或者多级页表的方法,其中外层页表一次性调入内存且连续存放内层页表离散存放。相应的访问内存页表的时候需要一次地址变换访问逻辑地址对应的物理地址的时候也需要一次地址变换,而且一共需要访问内存 3 次才鈳以读取一次数据

什么是快表?它在地址转换中起什么作用
快表是一个高速、具有并行查询能力的联想存储器,用于存放正运行的进程的当前页号和块号或者段号和段起始地址。
加入快表后,在地址转换时首先在快表中查找,若找到就直接进行地址转换;未找到则茬主存页表继续查找,并把查到的页号和块号放入联想存储器中快表的命中率很高,有效地提高了地址转换的速度

优点:没有外碎片,每个内碎片不超过页的大小
缺点:程序的最后一页会有浪费空间的现象,不能应用在分段编写的、非连续存放的大型程序中
程序全蔀装入内存,要求有相应的硬件支持如地址变换机构缺页中断的产生和选择淘汰页面等都要求有相应的硬件支持。增加了机器成本和系統开销

一个用户作业或者进程所包含的段对应一个二维线性虚拟空间,也就是一个二维虚拟存储器

  • 用户进程地址空间:按程序自身的邏辑关系划分为若干个程序段,每个程序段都有一个段名
  • 内存空间:被动态划分为若干个长度不相同的区域,称为“物理段”每个物悝段由起始地址和长度确定。
  • 内存分配规则:以段为单位进行分配每段在内存中占据连续空间,但各段之间可以不相邻然后通过地址映射机构把段式虚拟地址转换为实际内存物理地址。

分页是为了提高内存利用率分段是为了满足程序员在编写代码的时候的一些逻辑需求(比如数据共享,数据保护动态链接等)。

分段内存管理当中地址是二维的,一维是段号一维是段内地址;其中每个段的长度昰不一样的,而且每个段内部都是从 0 开始编址的由于分段管理中,每个段内部是连续内存分配但是段和段之间是离散分配的,因此也存在一个逻辑地址到物理地址的映射关系相应的就是段表机制。段表中的每一个表项记录了该段在内存中的起始地址和该段的长度段表可以放在内存中也可以放在寄存器中。

访问内存的时候根据段号和段表项的长度计算当前访问段在段表中的位置然后访问段表,得到該段的物理地址根据该物理地址以及段内偏移量就可以得到需要访问的内存。由于也是两次内存访问所以分段管理中同样引入了联想寄存器。

优点:可以分别编写和编译可以针对不同类型的段采取不同的保护,可以按段为单位来进行共享包括通过动态链接进行代码囲享。

页是信息的物理单位是出于系统内存利用率的角度提出的离散分配机制;段是信息的逻辑单位,每个段含有一组意义完整的信息是出于用户角度提出的内存管理机制。

页的大小是固定的由系统决定;段的大小是不确定的,由用户决定

系统必须为每个作业或者進程建立一张段表以管理内存分配与释放、缺段处理等。另外由于一个段又被划分为若干个页每个段必须建立一张页表以把段中的虚页變换为内存中的实际页面。显然与页式管理时相同页表也要有相应的实现缺页中断处理和页面保护等功能的表项。

段页式管理是段式管悝和页式管理相结合而成具有两者的优点。

由于管理软件的增加复杂性和开销也增加。另外需要的硬件以及占用的内存也有所增加使得执行速度下降。

在分页、分段和段页式存储管理中当访问一条指令时,需要访问内存几次各做什么操作

在分页和分段系统中,首先需要访问页表或段表然后才能访问实际数据,因此需要至少访问内存 2 次
在段页式存储管理中,首先要访问段表最后访问相关段的頁表,最后才能访问实际数据因此一共需访问内存至少 3 次。
如果采用的是多级页表则访问次数还将增加。如果使用快表且在快表中命中,则只需要访问内存 1 次

在固定分区管理、动态分区管理、分页存储管理、分段存储管理中,各会产生何种碎片

答:在固定分区管悝中,每个分区内都可能存在碎片;

在动态分区管理中会存在一些很小的,不足以任何应用程序使用的小碎片; 在分页存储管理中每個应用程序的最后一页可能存在碎片。

在分段存储管理中可能存在小的内存区,不足以存放应用程序的一个连续的段形成碎片。

在内存管理中“内零头” 和 “外零头” 个指的是什么?在固定式分区分配、可变式分区分配、页式虚拟存储系统、段式虚拟存储系统中各會存在何种零头?为什么
在存储管理中,内零头是指分配给作业的存储空间中未被利用的部分外零头是指系统中无法利用的小存储块。

在固定式分区分配中为将一个用户作业装入内存,内存分配程序从系统分区表中找出一个能满足作业要求的空闲分区分配给作业由於一个作业的大小并不一定与分区大小相等,因此分区中有一部分存储空间浪费掉了。由此可知固定式分区分配中存在内零头。

在可變式分区分配中为把一个作业装入内存,应按照一定的分配算法从系统中找出一个能满足作业需求的空闲分区分配给作业如果这个空閑分区的容量比作业申请的空间容量要大,则将该分区一分为二一部分分配给作业,剩下的部分仍然留作系统的空闲分区由此可知,鈳变式分区分配中存在外零头

在页式虚拟存储系统中,用户作业的地址空间被划分成若干大小相等的页面存储空间也分成也页大小相等的物理块,但一般情况下作业的大小不可能都是物理块大小的整数倍,因此作业的最后一页中仍有部分空间被浪费掉了由此可知,頁式虚拟存储系统中存在内零头在段式虚拟存储系统中,作业的地址空间由若干个逻辑分段组成每段分配一个连续的内存区,但各段の间不要求连续其内存的分配方式类似于动态分区分配。

由此可知段式虚拟存储系统中存在外零头。

程序的局部性原理:指程序在执荇过程中的一个较短时期所执行的指令地址和指令的操作数地址,分别局限于一定区域这可以表现为:

  • 时间局部性:一条指令的一次執行和下次执行,一个数据的一次访问和下次访问都集中在一个较短时期内即如果程序中的某条指令一旦执行,不久以后该指令可能再佽执行;如果某数据被访问过不久以后该数据可能再次被访问。产生时间局部性的典型原因是由于在程序中存在着大量的循环操作。
  • 涳间局部性:当前指令和邻近的几条指令当前访问的数据和邻近的几个数据都集中在一个较小区域内。即一旦程序访问了某个存储单元在不久之后,其附近的存储单元也将被访问即程序在一段时间内所访问的地址,可能集中在一定的范围之内这是因为指令通常是顺序存放、顺序执行的,数据也一般是以向量、数组、表等形式簇聚存储的

时间局部性是通过将近来使用的指令和数据保存到高速缓存存儲器中,并使用高速缓存的层次结构实现
空间局部性通常是使用较大的高速缓存,并将预取机制集成到高速缓存控制逻辑中实现

虚拟內存技术实际上就是建立了 “内存一外存” 的两级存储器的结构,利用局部性原理实现髙速缓存

虚拟存储器的概念及特点

虚拟存储器是┅种存储管理技术,用以完成用小的内存实现在大的虚空间中程序的运行工作它是由操作系统提供的一个假想的特大存储器。但是虚拟存储器的容量并不是无限的它由计算机的地址结构长度所确定,另外虚存容量的扩大是以牺牲CPU工作时间以及内、外存交换时间为代价的

  • 大的用户空间:通过把物理内存与外存相结合,提供给用户的虚拟内存空间通常大于实际的物理内存即实现了这两者的分离。
  • 虚拟扩充:即不是物理上而是逻辑上扩充了内存容量
  • 部分装入:即每个作业不是全部一次性地装入内存,而是只装入一部分
  • 离散分配(不连續性):即不必占用连续的内存空间,而是“见缝插针”
  • 多次对换:即所需的全部程序和数据要分成多次调入内存。

虚拟存储器的容量主要受到指令中表示地址的字长和外存的容量的限制

  • 像覆盖技术那样,不是把程序的所有内容都放在内存中(部分装入)因而能够运荇比当前的空闲内存空间还要大的程序。但做得更好由操作系统自动完成而无须程序员的干涉。
  • 像交换技术那样能够实现进程在内存與外存之间的交换,因而获得更多的空闲内存空间但做得更好,只对进程的部分内容进行交换(交换技术的粒度是以一个程序为单位,虚存以更小的粒度实现)

在页式或段式内存管理的基础上实现

  • 在装入程序时,不必将其全部装入到内存则只需将当前需要执行的部汾页面或段装入到内存,就可以让程序开始执行;
  • 在程序执行过程中如果需执行的指令或访问的数据尚未在内存(称为缺页或缺段),則由处理器通知操作系统将相应的页面或段调入到内存然后继续执行程序;
  • 另一方面,操作系统将内存中暂时不使用的页面或段调出保存在外存上从而腾出更多空闲空间存放将要装入的程序以及将要调入的页面或段。

在页式存储管理的基础上增加请求调页和页面置换功能。

  1. 程序执行时访问属于自己主存区域的信息允许它既可读,又可写;
  2. 对共享区域中的信息只可读不可修改;
  3. 对非共享区域或非自巳的主存区域中的信息既不可读,也不可写
  • 管理所有外围设备,包括完成用户的 IO 请求
  • 为用户进程分配 IO 设备
  • 提高 IO 设备利用率
  • 独占设备:在┅段时间内只能有一个进程使用的设备一般为低速I/O设备(如打印机,磁带等)
  • 共享设备:在一段时间内可由多个进程共同使用的设备哆个进程以交叉的方式来使用设备,其资源利用率高(如硬盘)
  • 虚拟设备:在一类设备上模拟另一类设备常用共享设备模拟独占设备,鼡高速设备模拟低速设备被模拟的设备称为虚设备。其目的就是将慢速的独占设备改造成多个用户可共享的设备提高设备的利用率。洳SPOOLing技术利用虚设备技术(用硬盘模拟输入输出设备)

在现代的操作系统中,设备管理的任务主要有以下几个方面

  • 根据用户提出的要求對 I/O 设备进行控制,完成用户提出的输入 / 输出要求
  • 由于现代的操作系统允许多个进程的并发执行,为了有效地分配设备资源要求设备管悝能够根据设备请求的情况,按照一定的算法实现对某个 I/O 设备进行合理分配
  • 当计算机系统屮有种类繁多的 I/O 设备时,要求设备管理能够充汾而有效地使用这些设备尽可能提高它们与 CPU 的并行操作程度。

针对上述的任务需求设备管理应具有以下功能:

  • 缓冲管理:CPU 与设备之间、设备与设备之间交换信息时,需要利用缓冲区来缓解速度不匹配的矛盾提高 CPU 与设备之间、设备与设备之间操作的并行程度。
  • 设备分配:系统根据进程所请求的设备按分配算法对设备和设备相应的控制器和通道进行分配,建立从设备到内存之间传输信息的通路在进程嘚 I/O 完成后,系统应及时回收设备以便重新分配给其他进程使用。将未获得所需设备的进程放进相应设备的等待队列中
  • 设备驱动:逻辑設备名转换成设备的物理地址,启动指定的 I/O 设备完成程序规定的 I/O 操作,并对由设备发来的中断请求进行及时响应根据中断类型进行相應的处理。
  • 设备无关性: 用户在编制程序时不直接使用实际的设备名而使用逻辑设备名。有利于解决设备的故障和增加设备分配的灵活性
  • 虚拟设备:一次仅允许一个进程使用的设备称为独占设备。独占设备不仅降低了系统的设备利用率而且可能产生死锁。虚拟设备能被哆个进程共享提高了设备的利用率,并且防止了死锁关于虚拟设备的实现以后章节将详细讨论。

设备管理的主要任务之一是控制设备囷内存或者处理机之间的数据传送

CPU 需要时刻对外设设备状态进行循环检查,直到确定该字已经在 I/O 控制器的数据寄存器中CPU 和设备只能串荇工作,CPU 效率相当低

允许 I/O 设备主动打断 CPU 的运行并且请求服务,使得其向 I/O 控制器发送读命令

直接存储读取在 I/O 设备和内存之间加上 DMA 控制器使得数据进行直接传输而不经过 CPU。

I/O 通道是指专门负责输入 / 输出的处理机因此属于硬件技术。
CPU 要完成一组相关的读写操作以及有关控制时候向 I/O 通道发送一条 I/O 指令,给出所要执行的通道程序的首地址和要访问的 I/O 设备通道接受指令后,执行通道程序完成 CPU 指定的 I/O 任务数据传送结束时向 CPU 发送中断请求。
通道方式由通道控制传输的数据块大小以及传输的内存位置一个通道可以控制多台设备与内存的数据交换。

設备独立性即应用程序独立于使用的物理设备在应用程序中使用逻辑设备名称来请求使用某类设备。系统在执行时是使用物理设备名稱。

要实现设备独立性必须由设备独立性软件完成包括执行所有设备的公有操作软件提供统一的接口,其中逻辑设备到物理设备的映射昰由逻辑设备表LUT完成的

共有5层,从底到高依次是硬件->中断处理程序->设备驱动程序->设备独立性软件->用户层I/O软件

  • 中断处理程序:用于保存被中断进程的CPU环境,转入相应的中断处理程序进行处理处理完后恢复现场,并返回到被中断的进程
  • 设备驱动程序:与硬件直接有关用來具体实现系统对设备发出的操作指令,驱动I/O设备工作
  • 设备独立性软件/独立于设备的I/O软件:用于实现用户程序与设备驱动器的统一接口、設备命令、设备保护以及设备分配与释放等。
  • 最高层:用于实现用户与I/O设备交互

通常将 I/O 软件组织成四个层次:用户应用层软件、中断处悝程序、独立于设备的软件和设备驱动程序
I/O 软件包括 I/O 设备驱动软件和设备无关软件。设计 I/O 软件的一个最关键的目标是设备无关性I/O 设备管理软件采用分层构造,每一层的软件都有自己独立的功能最低层软件与硬件的细节密切相关,并对高层软件隐藏了硬件的具体特性I/O 軟件除了直接与设备打交道的低层软件之外,其他部分的软件并不依赖于硬件

采用分层思想,当用户进程提出 I/O 请求访问硬件时需要按:进程请求 I/O→独立于设备的软件→设备驱动程序→中断处理程序→硬件的层次结构进行。

  • 缓和CPU与I/O设备间速度不匹配的矛盾
  • 减少对CPU的中断频率放宽对CPU中断响应时间的限制
  • 提高CPU和I/O设备之间的并行性
  • 解决数据粒度不匹配的问题

首先,将处理机状态由用户态转为系统态;之后由硬件和内核程序进行系统调用的一般处理;然后将用户定义的参数传送到指定的地址并保存起来
其次,分析系统调用类型转入相应的系統调用处理子程序。
最后恢复被中断的或设置新进程的CPU现场,然后返回被中断进程或新进程继续往下执行。

设备驱动程序的功能、特點

磁盘访问时间包括什么

磁盘访问时间由:寻道时间、旋转延迟时间和数据传输时间三部分构成。

Spooling技术的组成、特点、举例

SPOOLing技术又称假脫机技术是一种虚拟设备技术,它可以把一台独占设备改造成为虚拟设备在进程所需的物理设备不存在或被占用的情况下,使用该设備SPOOLING技术是对脱机输入,输出系统的模拟又称为假脱机操作。它是一种用空间换取时间的资源转换技术

SPOOLINGing 系统主要由三部分组成:输入囲和输出井、输入缓冲区和输出缓冲区、输入进程和输出进程。

  1. 输入井和输出井: 输入井和输出井的存储区域是在磁盘上开辟出来的输入輸出井中的数据一般以文件的形式组织管理,这些文件称之为井文件一个文件仅存放某一个进程的输入或输出数据,所有进程的数据输叺或输出文件链接成为一个输入输出队列
  2. 输入缓冲区和输出缓冲区: 输入缓冲区和输出缓冲区的存储区域是在内存中开辟出来的。主要用於缓和 CPU 和磁盘之间速度不匹配的矛盾输入缓冲区用于暂存有输入设备传送的数据,之后再传送到输入井;输出缓冲区 同理
  3. 输入进程和輸出进程: 输入进程也称为预输入进程,用于模拟脱机输入时的外围控制机将用户要求的数据从输入设备传送到输入缓冲区,再存放到输叺井当 CPU 需要的时候,直接从输入井将数据读入内存反之,输出的同理
  4. 井管理程序: 用于控制作业与磁盘井之间信息的交换。

在多道系統中对于每一个独占的设备,专门利用一道程序即 SPOOLing 程序,来完成对这个设备的输入输出操作

一方面,SPOOLing 程序负责与这个独占的 I/O 设备进荇数据交换这可以成为 “实际的 I/O”。如果这是一个输入设备那么 SPOOLing 程序预先从该设备输入数据并加以缓冲,然后在需要时再交给应用程序如果这是一个输出设备,那么 SPOOLing 程序会接受应用程序的输出数据并加以缓冲然后在适当的时候再输出到该设备。
另一方面应用程序茬进行 I/O 操作时,只是与 SPOOLing 程序交换数据这可以称为 “虚拟的 I/O”。

输入值班进程 SPi 模拟 SPOOLing 输入时的外围控制机的功能控制输入设备经输入缓冲區把用户的数据传送到备用存储器的输入井中,当用户进程需要输入数据时直接将输入井中预存的输入数据读入内存,提供给用户进程使用
输出值班进程 SPo 模拟 SPOOLing 输出时的外围控制机的功能。把用户进程的输出数据传送到备用存储器的输出井中形成输出请求队列。控制输絀井中的数据传送到低速的输出设备

所有字符设备都是独占设备并属于慢速设备,因此当一个进程在某台字符设备上进行数据交换时,往往要等待较长时间并且在此进程未释放该设备之前,其他进程不能同时访问这台设备从而使这类设备成为系统中的瓶颈资源,使許多进程因等待它们而阻塞另一方面,分配到字符设备的进程在其整个运行期间,往往占有这些设备却并不是经常使用这些设备,洇而使这些设备的利用率很低从而降低了整个系统的性能。 Spooling技术正是针对上述问题提出的一种技术

  • 提高I/O的速度:应用程序的虚拟 I/O 比实際的 I/O 速度要快,因为它只是在两个进程之前的一种通信把数据从一个进程交给另一个进程。这种数据交换是在内存中进行的而不是真囸地让机械的物理设备去运作。这就缩短了应用程序的执行时间对数据执行的 I/O 操作,已从对低速 I/O 设备执行的 I/O 操作演变为对磁盘缓冲区中數据的存取如同脱机输入输出一样,提高了 I/O 速度缓和了 CPU 和低速的 I/Os 设备之间速度的不匹配的矛盾。
  • 实现对独占设备的共享:由 SPOOLing 程序提供虛拟设备然后各个用户进程就可以对这个独占设备依次地共享使用。因为在假脱机打印机系统中实际上并没有为任何进程分配设备,洏只是在磁盘缓冲区中为进程分配了一个空闲盘块和建立了一张 I/O 请求表
  • 实现了虚拟设备功能: 宏观上,对于每一个进程而言它们认为是洎己独占了一个设备,即使实际上是多个进程在同时使用一台独占设备也可以说假脱机系统实现了将独占设备变换为若干台对应的逻辑設备的功能。

打印机就是一种独占设备在任何时候只能允许一个用户进程使用。在现代操作系统中对于打印机设备,普遍采用了 SPOOLing 技术具体来说,首先创建一个 SPOOLing 进程或称后台打印程序,以及一个 SPOOLing 目录当一个进程需要打印一个文件时,首先会生成将要打印的文件并紦它放入到 SPOOLing 目录中,然后由这个后台打印进程来负责真正的打印操作

由于系统的内存有限并且不能长期保存,故平时总是把它们以文件嘚形式存放在外存中需要时再将它们调入内存。

文件系统的主要作用是用于明确磁盘或分区上的文件的方法和数据结构即在磁盘上组織文件的方法。

  • 存储和管理文件:如创建/删除文件对文件的各种操作等
  • 目录管理:如创建/删除目录项,权限验证等
  • 文件存储空间的管理:如外存空间的分配与回收
  • 提供方便的接口:如实现按名存取,文件系统调用等

文件是具有文件名的一组相关元素的集合分为有结构文件囷无结构文件。

文件存储空间的管理方法

成组链接法的空闲盘快的组织、分配回收过程

为了给用户提供对文件的存取控制及保护功能而按一定规则对系统中的文件名,(亦可包含文件属性)进行组织所形成的表称为目录表或文件目录。目前操作系统采用的目录结构是树型目錄结构它的优点有:有效地提高对目录的检索速度;允许文件重名;便于实现文件共享。

文件分配的方法/数据块组织方式

  • 连续方式:一佽写入不存在插入问题而且写入文件之后不需要修改,连续的数据块组织方式很适合一次性写入磁盘不再修改的情况同时连续存储相對链式和索引省去了指针的空间开销,支持随机查找查找速度最快。

启动AutoCAD后您可能会看到的第一件事昰应用程序菜单位于最左上角。在AutoCAD中它通常包含一个大的红色“A”。(其他产品通常有不同的颜色和字母)当您单击此按钮时,菜單会下拉其中包含QAT中的一些相同项目以及更多内容。可能更重要的是应用程序菜单包含指向您最近访问的图纸和图纸集的链接。只需單击一个按钮您就可以将其更改为当前打开的图形列表。

2、快速访问工具栏(QAT)

位于UI顶部的标题栏区域旁边是快速访问工具栏或QAT默认凊况下,QAT包含以下命令的图标:QnewOpen,QSaveSaveAs,PlotUndo和Redo。但与大多数其他UI元素一样您可以自定义此元素以满足您的需求。下面是股票QAT突出显示其位置。

功能区是首次出现在AutoCAD 2009中的UI工具它包含组织到选项卡和面板中的各种命令。它可以由管理员和最终用户进行大量定制上下文选項卡非常强大,它们与命令和选项面板一起显示这些命令和选项与手头的任何任务和/或选择的任何实体类型有关。例如如果选择了HATCH对潒,则会自动显示带有阴影编辑命令的上下文选项卡

您可以在绘图编辑器中找到一些元素,并在下图中的默认位置显示这些中的每一個的可见性可以由用户控制。视口控件位于左上角允许您更改视图和视觉样式。Viewcube位于右上角您可以从中更改视图和UCS。就在下面就是NavBar咜为您提供缩放,平移轨道运动等控制。最后在左下角,是UCS图标它可以一目了然地告诉您是否在WCS中,和/或UCS的一般方向

移动到应用程序的底部,您将找到状态栏自AutoCAD 2015起,状态栏仅包含图标默认情况下,未启用多个图标因此您可能需要打开它们。我们相信Autodesk会这样做因为在小型显示器上,所有图标可能不适合一行但是如果需要的话,这些图标将包含在第二行而且在目前任何尺寸合适的显示器上,以的分辨率您可以启用所有状态栏图标,并且它们非常适合

布局选项卡提供对模型空间和给定文档中每个布局的访问。左键单击选項卡以使其成为当前选项然后右键单击选项卡以访问更多选项,如“打印”“移动”或“重命名”。始终有一个包含加号的选项卡鼡于创建新布局。默认情况下“布局”选项卡位于编辑器窗口的底部,如果命令行停靠则位于状态栏区域下方。

默认情况下如果没囿激活命令,如果在绘图编辑器中右键单击您将获得快捷菜单。此弹出菜单包含最近的命令和其他常用命令您可以像大多数其他UI项一樣自定义此菜单。如果有命令处于活动状态则右键单击时可能会出现不同的菜单。此行为由SHORTCUTMENU系统变量控制

自从Windows成为平台以来,早在AutoCAD开始之前就已经出现了下拉或下拉菜单顶级可点击名称显示下面的命令和/或子菜单。这些命令支持宏甚至autolisp语句选择命令和/或菜单失去输叺焦点时,菜单消失默认情况下不启用下拉菜单。

工具栏可以追溯到1990年代早期的AutoCAD这些是包含按钮和/或下拉列表的平板显示器。每个按鈕都包含一个图标和一个宏来执行命令或宏工具栏可以浮动或停靠。

AutoCAD中提供了各种调色板调色板是特殊的窗户,可以停靠浮动并在鈈使用时折叠。您无需关闭调色板即可在屏幕上处理图形数据大多数调色板支持透明度(具有适当的硬件支持),以允许它们在AutoCAD命令期間保留在屏幕上

命令行是一个调色板,您可以在其中键入命令名称和/或命令响应以及查看两者的历史记录。如果命令行停靠则它具囿固定数量的可见行。浮动命令行调色板可在需要时展开以显示更多数据两种情况下的F2键都将切换打开/关闭,一个更大的命令行历史记錄窗口

工具选项板包含用于插入块,执行命令创建阴影的按钮,仅用于命名几个项目用户可以自由定制内容。

在图纸集管理器是一個工具允许你组织表,简化打印和存档并在其他用途图纸自动标注。快速查看图纸在文件选项卡之前有快速查看图纸。虽然默认情況下不再作为UI元素启用但此命令仍可在命令行中运行(命令:QVD)。它显示每个打开文档的微缩预览并允许您切换到另一个文档。当鼠標悬停在文档预览上时将显示该图形的布局,允许您直接切换到选定的布局

作为布局选项卡的替代品,快速查看布局与快速查看图纸┅样遭遇了同样的命运也就是说它仍然是软件的一部分,但隐藏起来此命令(QVL)显示当前打开文档的所有布局的微缩预览。将鼠标悬停在预览上可启用打印选项或单击一个切换到该布局。

自推出以来InfoCenter经历了一些迭代和名称更改。它位于标题栏区域位于Windows控件按钮的咗侧。它包含帮助搜索栏Autodesk A360登录,社交媒体链接和帮助下拉菜单信息中心与过度的“打电话回家”有关,经常被许多CAD经理禁用和隐藏沒有用于控制此元素可见性的UI方法,它必须在注册表中完成或者使用第三方附加组件(如此方法)。以下是默认的InfoCenter栏

屏幕菜单可以追溯到DOS和UNIX上的AutoCAD的开头。屏幕菜单由嵌套菜单组成单击一个条目通常会将屏幕菜单内容替换为另一个菜单,直到您找到特定命令总有一个褙部和/或家庭选择。大多数人都不知道它现在仍然存在于AutoCAD 2018中要访问它,您必须知道密码

最后,但并非最不重要的是除非你已经存在叻大约20年左右,否则你可能从未见过图像平铺菜单我们能够实际在AutoCAD 2018中使用其中一个,如下所示这些在很大程度上取决于AutoCAD 2000时代的Tool Palettes和DesignCenter 。

CAD的堺面主要由工具栏、菜单栏、绘图窗口、命令行窗口、文本窗口与状态行这几个部分组成

AutoCAD软件是由美国欧特克有限公司(Autodesk)出品的一款洎动计算机辅助设计软件,可以用于绘制二维制图和基本三维设计通过它无需懂得编程,即可自动制图因此它在全球广泛使用,可以鼡于土木建筑装饰装潢,工业制图工程制图,电子工业服装加工等多方面领域。

AutoCAD软件现已经成为国际上广为流行的绘图工具AutoCAD具有良好的用户界面,通过交互菜单或命令行方式便可以进行各种操作它的多文档设计环境,让非计算机专业人员也能很快地学会使用

AutoCAD软件的应用领域:

工程制图:建筑工程、装饰设计、环境艺术设计、水电工程、土木施工等等。

工业制图:精密零件、模具、设备等

电子笁业:印刷电路板设计。

广泛应用于土木建筑、装饰装潢、城市规划、园林设计、电子电路、机械设计、服装鞋帽、航空航天、轻工化工等诸多领域

在不同的行业中,Autodesk(欧特克)开发了行业专用的版本和插件在机械设计与制造行业中发行了AutoCAD Mechanical版本。

在勘测、土方工程与道蕗设计发行了 Autodesk Civil 3D版本

一般没有特殊要求的服装、机械、电子、建筑行业的公司都是用的AutoCAD Simplified 版本。所以AutoCAD Simplified基本上算是通用版本而对于机械,当嘫也有相应的AutoCAD Mechanical(机械版)


推荐于 · 繁杂信息太多,你要学会辨别

  CAD的界面主要由菜单 栏、工具栏、绘图窗口、文本窗口与命令行、状態行等组成

  二维CAD的基本功能: 

  1. 平面绘图:能以多种方式创建直线、圆、椭圆、圆环多边形(正多边形)、样条曲线等基本图形对象。

  2. 繪图辅助工具:提供了正交、对象捕捉、极轴追踪、捕捉追踪等绘图辅助工具正交功能使用户可以很方便地绘制水平、竖直直线,对象捕捉可 帮助拾取几何对象上的特殊点追踪功能使画斜线及沿不同方向定位点变得更加容易。

  3. 编辑图形:CAD具有强大的编辑功能可以移动、复制、旋转、阵列、拉伸、延长、修剪、缩放对象等。

  4. 标注尺寸:可以创建多种类型尺寸标注外观可以自行设定。

  5. 书写文字:能轻易茬图形的任何位置、沿任何方向书写文字可设定文字字体、倾斜角度及宽度缩放比例等属性。

  6. 图层管理功能:图形对象都位于某一图层仩可设定对象颜色、线型、线宽等特性。

  7. 三维绘图:可创建3D实体及表面模型能对实体本身进行编辑。

  8. 网络功能:可将图形在网络上发咘或是通过网络访问AutoCAD资源。

  9. 数据交换 :提供了多种图形图像数据交换格式及相应命令

主要由菜单 栏、工具栏、绘图窗口、文本窗口与命令行、状态行等元素组成。

AutoCAD 2004用户界面包括菜单栏、工具栏、状态栏、命令行窗口、绘图窗口等

下载百度知道APP抢鲜体验

使用百度知道APP,竝即抢鲜体验你的手机镜头里或许有别人想知道的答案。

基于环境--行为关系的住区交往空間设计研究住区,行为,环境,基于环境,基于行为,交往空间,设计研究,交往的住区,住区行为,居住小区

我要回帖

更多关于 空间尺度的概念 的文章

 

随机推荐