精华内容
下载资源
问答
  • 操作系统常见问题总结!

    千次阅读 2021-02-15 22:28:32
    操作系统基础 1.1 什么是操作系统? ????‍????面试官 : 先来个简单问题吧!什么是操作系统? ???? 我 :我通过以下四点向您介绍一下什么是操作系统吧! 操作系统(Operating System,简称 OS)是管理计算机...

    一 操作系统基础

    1.1 什么是操作系统?

    👨‍💻面试官 : 先来个简单问题吧!什么是操作系统?

    🙋 :我通过以下四点向您介绍一下什么是操作系统吧!

    1. 操作系统(Operating System,简称 OS)是管理计算机硬件与软件资源的程序,是计算机的基石。
    2. 操作系统本质上是一个运行在计算机上的软件程序 ,用于管理计算机硬件和软件资源。 举例:运行在你电脑上的所有应用程序都通过操作系统来调用系统内存以及磁盘等等硬件。
    3. 操作系统存在屏蔽了硬件层的复杂性。 操作系统就像是硬件使用的负责人,统筹着各种相关事项。
    4. 操作系统的内核(Kernel)是操作系统的核心部分,它负责系统的内存管理,硬件设备的管理,文件系统的管理以及应用程序的管理。 内核是连接应用程序和硬件的桥梁,决定着系统的性能和稳定性。

    Kernel_Layout

    1.2 系统调用

    👨‍💻面试官什么是系统调用呢? 能不能详细介绍一下。

    🙋 :介绍系统调用之前,我们先来了解一下用户态和系统态。

    根据进程访问资源的特点,我们可以把进程在系统上的运行分为两个级别:

    1. 用户态(user mode) : 用户态运行的进程或可以直接读取用户程序的数据。
    2. 系统态(kernel mode):可以简单的理解系统态运行的进程或程序几乎可以访问计算机的任何资源,不受限制。

    说了用户态和系统态之后,那么什么是系统调用呢?

    我们运行的程序基本都是运行在用户态,如果我们调用操作系统提供的系统态级别的子功能咋办呢?那就需要系统调用了!

    也就是说在我们运行的用户程序中,凡是与系统态级别的资源有关的操作(如文件管理、进程控制、内存管理等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。

    这些系统调用按功能大致可分为如下几类:

    • 设备管理。完成设备的请求或释放,以及设备启动等功能。
    • 文件管理。完成文件的读、写、创建及删除等功能。
    • 进程控制。完成进程的创建、撤销、阻塞及唤醒等功能。
    • 进程通信。完成进程之间的消息传递或信号传递等功能。
    • 内存管理。完成内存的分配、回收以及获取作业占用内存区大小及地址等功能。

    二 进程和线程

    2.1 进程和线程的区别

    👨‍💻面试官: 好的!我明白了!那你再说一下: 进程和线程的区别

    🙋 我: 好的! 下图是 Java 内存区域,我们从 JVM 的角度来说一下线程和进程之间的关系吧!

    如果你对 Java 内存区域 (运行时数据区) 这部分知识不太了解的话可以阅读一下这篇文章:《可能是把 Java 内存区域讲的最清楚的一篇文章》

    jvm运行时数据区域

    从上图可以看出:一个进程中可以有多个线程,多个线程共享进程的方法区 (JDK1.8 之后的元空间)资源,但是每个线程有自己的程序计数器虚拟机栈本地方法栈

    总结: 线程是进程划分成的更小的运行单位,一个进程在其执行的过程中可以产生多个线程。线程和进程最大的不同在于基本上各进程是独立的,而各线程则不一定,因为同一进程中的线程极有可能会相互影响。线程执行开销小,但不利于资源的管理和保护;而进程正相反。

    2.2 进程有哪几种状态?

    👨‍💻面试官 : 那你再说说进程有哪几种状态?

    🙋 :我们一般把进程大致分为 5 种状态,这一点和线程很像!

    • 创建状态(new) :进程正在被创建,尚未到就绪状态。
    • 就绪状态(ready) :进程已处于准备运行状态,即进程获得了除了处理器之外的一切所需资源,一旦得到处理器资源(处理器分配的时间片)即可运行。
    • 运行状态(running) :进程正在处理器上上运行(单核 CPU 下任意时刻只有一个进程处于运行状态)。
    • 阻塞状态(waiting) :又称为等待状态,进程正在等待某一事件而暂停运行如等待某资源为可用或等待 IO 操作完成。即使处理器空闲,该进程也不能运行。
    • 结束状态(terminated) :进程正在从系统中消失。可能是进程正常结束或其他原因中断退出运行。

    订正:下图中 running 状态被 interrupt 向 ready 状态转换的箭头方向反了。

    process-state

    2.3 进程间的通信方式

    👨‍💻面试官进程间的通信常见的的有哪几种方式呢?

    🙋 :大概有 7 种常见的进程间的通信方式。

    下面这部分总结参考了:《进程间通信 IPC (InterProcess Communication)》 这篇文章,推荐阅读,总结的非常不错。

    1. 管道/匿名管道(Pipes) :用于具有亲缘关系的父子进程间或者兄弟进程之间的通信。
    2. 有名管道(Names Pipes) : 匿名管道由于没有名字,只能用于亲缘关系的进程间通信。为了克服这个缺点,提出了有名管道。有名管道严格遵循先进先出(first in first out)。有名管道以磁盘文件的方式存在,可以实现本机任意两个进程通信。
    3. 信号(Signal) :信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生;
    4. 消息队列(Message Queuing) :消息队列是消息的链表,具有特定的格式,存放在内存中并由消息队列标识符标识。管道和消息队列的通信数据都是先进先出的原则。与管道(无名管道:只存在于内存中的文件;命名管道:存在于实际的磁盘介质或者文件系统)不同的是消息队列存放在内核中,只有在内核重启(即,操作系统重启)或者显示地删除一个消息队列时,该消息队列才会被真正的删除。消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取.比 FIFO 更有优势。消息队列克服了信号承载信息量少,管道只能承载无格式字 节流以及缓冲区大小受限等缺。
    5. 信号量(Semaphores) :信号量是一个计数器,用于多进程对共享数据的访问,信号量的意图在于进程间同步。这种通信方式主要用于解决与同步相关的问题并避免竞争条件。
    6. 共享内存(Shared memory) :使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据的更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等。可以说这是最有用的进程间通信方式。
    7. 套接字(Sockets) : 此方法主要用于在客户端和服务器之间通过网络进行通信。套接字是支持 TCP/IP 的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。

    2.4 线程间的同步的方式

    👨‍💻面试官那线程间的同步的方式有哪些呢?

    🙋 :线程同步是两个或多个共享关键资源的线程的并发执行。应该同步线程以避免关键的资源使用冲突。操作系统一般有下面三种线程同步的方式:

    1. 互斥量(Mutex):采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。比如 Java 中的 synchronized 关键词和各种 Lock 都是这种机制。
    2. 信号量(Semphares) :它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量
    3. 事件(Event) :Wait/Notify:通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操

    2.5 进程的调度算法

    👨‍💻面试官你知道操作系统中进程的调度算法有哪些吗?

    🙋 :嗯嗯!这个我们大学的时候学过,是一个很重要的知识点!

    为了确定首先执行哪个进程以及最后执行哪个进程以实现最大 CPU 利用率,计算机科学家已经定义了一些算法,它们是:

    • 先到先服务(FCFS)调度算法 : 从就绪队列中选择一个最先进入该队列的进程为之分配资源,使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用 CPU 时再重新调度。
    • 短作业优先(SJF)的调度算法 : 从就绪队列中选出一个估计运行时间最短的进程为之分配资源,使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用 CPU 时再重新调度。
    • 时间片轮转调度算法 : 时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法,又称 RR(Round robin)调度。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。
    • 多级反馈队列调度算法 :前面介绍的几种进程调度的算法都有一定的局限性。如短进程优先的调度算法,仅照顾了短进程而忽略了长进程 。多级反馈队列调度算法既能使高优先级的作业得到响应又能使短作业(进程)迅速完成。,因而它是目前被公认的一种较好的进程调度算法,UNIX 操作系统采取的便是这种调度算法。
    • 优先级调度 : 为每个流程分配优先级,首先执行具有最高优先级的进程,依此类推。具有相同优先级的进程以 FCFS 方式执行。可以根据内存要求,时间要求或任何其他资源要求来确定优先级。

    三 操作系统内存管理基础

    3.1 内存管理介绍

    👨‍💻 面试官: 操作系统的内存管理主要是做什么?

    🙋 我: 操作系统的内存管理主要负责内存的分配与回收(malloc 函数:申请内存,free 函数:释放内存),另外地址转换也就是将逻辑地址转换成相应的物理地址等功能也是操作系统内存管理做的事情。

    3.2 常见的几种内存管理机制

    👨‍💻 面试官: 操作系统的内存管理机制了解吗?内存管理有哪几种方式?

    🙋 我: 这个在学习操作系统的时候有了解过。

    简单分为连续分配管理方式非连续分配管理方式这两种。连续分配管理方式是指为一个用户程序分配一个连续的内存空间,常见的如 块式管理 。同样地,非连续分配管理方式允许一个程序使用的内存分布在离散或者说不相邻的内存中,常见的如页式管理段式管理

    1. 块式管理 : 远古时代的计算机操系统的内存管理方式。将内存分为几个固定大小的块,每个块中只包含一个进程。如果程序运行需要内存的话,操作系统就分配给它一块,如果程序运行只需要很小的空间的话,分配的这块内存很大一部分几乎被浪费了。这些在每个块中未被利用的空间,我们称之为碎片。
    2. 页式管理 :把主存分为大小相等且固定的一页一页的形式,页较小,相对相比于块式管理的划分力度更大,提高了内存利用率,减少了碎片。页式管理通过页表对应逻辑地址和物理地址。
    3. 段式管理 : 页式管理虽然提高了内存利用率,但是页式管理其中的页实际并无任何实际意义。 段式管理把主存分为一段段的,每一段的空间又要比一页的空间小很多 。但是,最重要的是段是有实际意义的,每个段定义了一组逻辑信息,例如,有主程序段 MAIN、子程序段 X、数据段 D 及栈段 S 等。 段式管理通过段表对应逻辑地址和物理地址。

    👨‍💻面试官 : 回答的还不错!不过漏掉了一个很重要的 段页式管理机制 。段页式管理机制结合了段式管理和页式管理的优点。简单来说段页式管理机制就是把主存先分成若干段,每个段又分成若干页,也就是说 段页式管理机制 中段与段之间以及段的内部的都是离散的。

    🙋 :谢谢面试官!刚刚把这个给忘记了~

    3.3 快表和多级页表

    👨‍💻面试官 : 页表管理机制中有两个很重要的概念:快表和多级页表,这两个东西分别解决了页表管理中很重要的两个问题。你给我简单介绍一下吧!

    🙋 :在分页内存管理中,很重要的两点是:

    1. 虚拟地址到物理地址的转换要快。
    2. 解决虚拟地址空间大,页表也会很大的问题。

    快表

    为了解决虚拟地址到物理地址的转换速度,操作系统在 页表方案 基础之上引入了 快表 来加速虚拟地址到物理地址的转换。我们可以把快表理解为一种特殊的高速缓冲存储器(Cache),其中的内容是页表的一部分或者全部内容。作为页表的 Cache,它的作用与页表相似,但是提高了访问速率。由于采用页表做地址转换,读写内存数据时 CPU 要访问两次主存。有了快表,有时只要访问一次高速缓冲存储器,一次主存,这样可加速查找并提高指令执行速度。

    使用快表之后的地址转换流程是这样的:

    1. 根据虚拟地址中的页号查快表;
    2. 如果该页在快表中,直接从快表中读取相应的物理地址;
    3. 如果该页不在快表中,就访问内存中的页表,再从页表中得到物理地址,同时将页表中的该映射表项添加到快表中;
    4. 当快表填满后,又要登记新页时,就按照一定的淘汰策略淘汰掉快表中的一个页。

    看完了之后你会发现快表和我们平时经常在我们开发的系统使用的缓存(比如 Redis)很像,的确是这样的,操作系统中的很多思想、很多经典的算法,你都可以在我们日常开发使用的各种工具或者框架中找到它们的影子。

    多级页表

    引入多级页表的主要目的是为了避免把全部页表一直放在内存中占用过多空间,特别是那些根本就不需要的页表就不需要保留在内存中。多级页表属于时间换空间的典型场景,具体可以查看下面这篇文章

    总结

    为了提高内存的空间性能,提出了多级页表的概念;但是提到空间性能是以浪费时间性能为基础的,因此为了补充损失的时间性能,提出了快表(即 TLB)的概念。 不论是快表还是多级页表实际上都利用到了程序的局部性原理,局部性原理在后面的虚拟内存这部分会介绍到。

    3.4 分页机制和分段机制的共同点和区别

    👨‍💻面试官分页机制和分段机制有哪些共同点和区别呢?

    🙋

    1. 共同点
      • 分页机制和分段机制都是为了提高内存利用率,较少内存碎片。
      • 页和段都是离散存储的,所以两者都是离散分配内存的方式。但是,每个页和段中的内存是连续的。
    2. 区别
      • 页的大小是固定的,由操作系统决定;而段的大小不固定,取决于我们当前运行的程序。
      • 分页仅仅是为了满足操作系统内存管理的需求,而段是逻辑信息的单位,在程序中可以体现为代码段,数据段,能够更好满足用户的需要。

    3.5 逻辑(虚拟)地址和物理地址

    👨‍💻面试官 :你刚刚还提到了逻辑地址和物理地址这两个概念,我不太清楚,你能为我解释一下不?

    🙋 我: em…好的嘛!我们编程一般只有可能和逻辑地址打交道,比如在 C 语言中,指针里面存储的数值就可以理解成为内存里的一个地址,这个地址也就是我们说的逻辑地址,逻辑地址由操作系统决定。物理地址指的是真实物理内存中地址,更具体一点来说就是内存地址寄存器中的地址。物理地址是内存单元真正的地址。

    3.6 CPU 寻址了解吗?为什么需要虚拟地址空间?

    👨‍💻面试官CPU 寻址了解吗?为什么需要虚拟地址空间?

    🙋 :这部分我真不清楚!

    于是面试完之后我默默去查阅了相关文档!留下了没有技术的泪水。。。

    这部分内容参考了 Microsoft 官网的介绍,地址:https://msdn.microsoft.com/zh-cn/library/windows/hardware/hh439648(v=vs.85).aspx

    现代处理器使用的是一种称为 虚拟寻址(Virtual Addressing) 的寻址方式。使用虚拟寻址,CPU 需要将虚拟地址翻译成物理地址,这样才能访问到真实的物理内存。 实际上完成虚拟地址转换为物理地址转换的硬件是 CPU 中含有一个被称为 内存管理单元(Memory Management Unit, MMU) 的硬件。如下图所示:

    MMU_principle_updated

    为什么要有虚拟地址空间呢?

    先从没有虚拟地址空间的时候说起吧!没有虚拟地址空间的时候,程序都是直接访问和操作的都是物理内存 。但是这样有什么问题呢?

    1. 用户程序可以访问任意内存,寻址内存的每个字节,这样就很容易(有意或者无意)破坏操作系统,造成操作系统崩溃。
    2. 想要同时运行多个程序特别困难,比如你想同时运行一个微信和一个 QQ 音乐都不行。为什么呢?举个简单的例子:微信在运行的时候给内存地址 1xxx 赋值后,QQ 音乐也同样给内存地址 1xxx 赋值,那么 QQ 音乐对内存的赋值就会覆盖微信之前所赋的值,这就造成了微信这个程序就会崩溃。

    总结来说:如果直接把物理地址暴露出来的话会带来严重问题,比如可能对操作系统造成伤害以及给同时运行多个程序造成困难。

    通过虚拟地址访问内存有以下优势:

    • 程序可以使用一系列相邻的虚拟地址来访问物理内存中不相邻的大内存缓冲区。
    • 程序可以使用一系列虚拟地址来访问大于可用物理内存的内存缓冲区。当物理内存的供应量变小时,内存管理器会将物理内存页(通常大小为 4 KB)保存到磁盘文件。数据或代码页会根据需要在物理内存与磁盘之间移动。
    • 不同进程使用的虚拟地址彼此隔离。一个进程中的代码无法更改正在由另一进程或操作系统使用的物理内存。

    四 虚拟内存

    4.1 什么是虚拟内存(Virtual Memory)?

    👨‍💻面试官 :再问你一个常识性的问题!什么是虚拟内存(Virtual Memory)?

    🙋 :这个在我们平时使用电脑特别是 Windows 系统的时候太常见了。很多时候我们使用点开了很多占内存的软件,这些软件占用的内存可能已经远远超出了我们电脑本身具有的物理内存。为什么可以这样呢? 正是因为 虚拟内存 的存在,通过 虚拟内存 可以让程序可以拥有超过系统物理内存大小的可用内存空间。另外,虚拟内存为每个进程提供了一个一致的、私有的地址空间,它让每个进程产生了一种自己在独享主存的错觉(每个进程拥有一片连续完整的内存空间)。这样会更加有效地管理内存并减少出错。

    虚拟内存是计算机系统内存管理的一种技术,我们可以手动设置自己电脑的虚拟内存。不要单纯认为虚拟内存只是“使用硬盘空间来扩展内存“的技术。虚拟内存的重要意义是它定义了一个连续的虚拟地址空间,并且 把内存扩展到硬盘空间。推荐阅读:《虚拟内存的那点事儿》

    维基百科中有几句话是这样介绍虚拟内存的。

    虚拟内存 使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。与没有使用虚拟内存技术的系统相比,使用这种技术的系统使得大型程序的编写变得更容易,对真正的物理内存(例如 RAM)的使用也更有效率。目前,大多数操作系统都使用了虚拟内存,如 Windows 家族的“虚拟内存”;Linux 的“交换空间”等。From:https://zh.wikipedia.org/wiki/虚拟内存

    4.2 局部性原理

    👨‍💻面试官 :要想更好地理解虚拟内存技术,必须要知道计算机中著名的局部性原理。另外,局部性原理既适用于程序结构,也适用于数据结构,是非常重要的一个概念。

    🙋 :局部性原理是虚拟内存技术的基础,正是因为程序运行具有局部性原理,才可以只装入部分程序到内存就开始运行。

    以下内容摘自《计算机操作系统教程》 第 4 章存储器管理。

    早在 1968 年的时候,就有人指出我们的程序在执行的时候往往呈现局部性规律,也就是说在某个较短的时间段内,程序执行局限于某一小部分,程序访问的存储空间也局限于某个区域。

    局部性原理表现在以下两个方面:

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

    时间局部性是通过将近来使用的指令和数据保存到高速缓存存储器中,并使用高速缓存的层次结构实现。空间局部性通常是使用较大的高速缓存,并将预取机制集成到高速缓存控制逻辑中实现。虚拟内存技术实际上就是建立了 “内存一外存”的两级存储器的结构,利用局部性原理实现髙速缓存。

    4.3 虚拟存储器

    勘误:虚拟存储器又叫做虚拟内存,都是 Virtual Memory 的翻译,属于同一个概念。

    👨‍💻面试官都说了虚拟内存了。你再讲讲虚拟存储器把!

    🙋

    这部分内容来自:王道考研操作系统知识点整理

    基于局部性原理,在程序装入时,可以将程序的一部分装入内存,而将其他部分留在外存,就可以启动程序执行。由于外存往往比内存大很多,所以我们运行的软件的内存大小实际上是可以比计算机系统实际的内存大小大的。在程序执行过程中,当所访问的信息不在内存时,由操作系统将所需要的部分调入内存,然后继续执行程序。另一方面,操作系统将内存中暂时不使用的内容换到外存上,从而腾出空间存放将要调入内存的信息。这样,计算机好像为用户提供了一个比实际内存大的多的存储器——虚拟存储器

    实际上,我觉得虚拟内存同样是一种时间换空间的策略,你用 CPU 的计算时间,页的调入调出花费的时间,换来了一个虚拟的更大的空间来支持程序的运行。不得不感叹,程序世界几乎不是时间换空间就是空间换时间。

    4.4 虚拟内存的技术实现

    👨‍💻面试官虚拟内存技术的实现呢?

    🙋 虚拟内存的实现需要建立在离散分配的内存管理方式的基础上。 虚拟内存的实现有以下三种方式:

    1. 请求分页存储管理 :建立在分页管理之上,为了支持虚拟存储器功能而增加了请求调页功能和页面置换功能。请求分页是目前最常用的一种实现虚拟存储器的方法。请求分页存储管理系统中,在作业开始运行之前,仅装入当前要执行的部分段即可运行。假如在作业运行的过程中发现要访问的页面不在内存,则由处理器通知操作系统按照对应的页面置换算法将相应的页面调入到主存,同时操作系统也可以将暂时不用的页面置换到外存中。
    2. 请求分段存储管理 :建立在分段存储管理之上,增加了请求调段功能、分段置换功能。请求分段储存管理方式就如同请求分页储存管理方式一样,在作业开始运行之前,仅装入当前要执行的部分段即可运行;在执行过程中,可使用请求调入中断动态装入要访问但又不在内存的程序段;当内存空间已满,而又需要装入新的段时,根据置换功能适当调出某个段,以便腾出空间而装入新的段。
    3. 请求段页式存储管理

    这里多说一下?很多人容易搞混请求分页与分页存储管理,两者有何不同呢?

    请求分页存储管理建立在分页管理之上。他们的根本区别是是否将程序全部所需的全部地址空间都装入主存,这也是请求分页存储管理可以提供虚拟内存的原因,我们在上面已经分析过了。

    它们之间的根本区别在于是否将一作业的全部地址空间同时装入主存。请求分页存储管理不要求将作业全部地址空间同时装入主存。基于这一点,请求分页存储管理可以提供虚存,而分页存储管理却不能提供虚存。

    不管是上面那种实现方式,我们一般都需要:

    1. 一定容量的内存和外存:在载入程序的时候,只需要将程序的一部分装入内存,而将其他部分留在外存,然后程序就可以执行了;
    2. 缺页中断:如果需执行的指令或访问的数据尚未在内存(称为缺页或缺段),则由处理器通知操作系统将相应的页面或段调入到内存,然后继续执行程序;
    3. 虚拟地址空间 :逻辑地址到物理地址的变换。

    4.5 页面置换算法

    👨‍💻面试官 :虚拟内存管理很重要的一个概念就是页面置换算法。那你说一下 页面置换算法的作用?常见的页面置换算法有哪些?

    🙋

    这个题目经常作为笔试题出现,网上已经给出了很不错的回答,我这里只是总结整理了一下。

    地址映射过程中,若在页面中发现所要访问的页面不在内存中,则发生缺页中断 。

    缺页中断 就是要访问的不在主存,需要操作系统将其调入主存后再进行访问。 在这个时候,被内存映射的文件实际上成了一个分页交换文件。

    当发生缺页中断时,如果当前内存中并没有空闲的页面,操作系统就必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。用来选择淘汰哪一页的规则叫做页面置换算法,我们可以把页面置换算法看成是淘汰页面的规则。

    • OPT 页面置换算法(最佳页面置换算法) :最佳(Optimal, OPT)置换算法所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。但由于人们目前无法预知进程在内存下的若千页面中哪个是未来最长时间内不再被访问的,因而该算法无法实现。一般作为衡量其他置换算法的方法。
    • FIFO(First In First Out) 页面置换算法(先进先出页面置换算法) : 总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面进行淘汰。
    • LRU (Least Currently Used)页面置换算法(最近最久未使用页面置换算法) :LRU算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 T,当须淘汰一个页面时,选择现有页面中其 T 值最大的,即最近最久未使用的页面予以淘汰。
    • LFU (Least Frequently Used)页面置换算法(最少使用页面置换算法) : 该置换算法选择在之前时期使用最少的页面作为淘汰页。

    Reference

    展开全文
  • 操作系统学习笔记:操作系统基础知识

    千次阅读 多人点赞 2021-09-20 20:14:26
    操作系统的概念、功能和目标 概念(定义) 首先来一张图来看看计算机系统的层次结构: 可以看到的是,操作系统扮演这一个连接硬件和软件、用户的角色。 由此可以得出操作系统的定义: 操作系统(Operating System,...

    操作系统的概念、功能和目标

    概念(定义)

    首先来一张图来看看计算机系统的层次结构:

    在这里插入图片描述

    可以看到的是,操作系统扮演这一个连接硬件和软件、用户的角色。

    由此可以得出操作系统的定义

    操作系统(Operating System, OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,它是计算机系统中最基本的系统软件

    • 从中间往上下看,它控制和管理整个计算机系统的硬件和软件资源
    • 从上往下看,它提供给用户和其他软件方便的接口和环境
    • 从下往上看,它是计算机系统中最基本的系统软件,是最接近硬件的软件

    如果想要更直观的解释,我们可以打开任务管理器的界面:
    在这里插入图片描述

    这张图可以很直观的展示操作系统所干的事情。

    功能和目标

    首先结合上面操作系统的层次结构图,思考操作系统在以下三个方面的功能实现:

    • ①操作系统作为系统资源的管理者(这些资源包括软件、硬件、文件等),需要提供什么功能?
    • ②操作系统作为用户与计算机硬件之间的接口,要为其上层的用户、应用程序提供简单易用的服务,需要实现什么功能?
    • ③操作系统作为最接近硬件的层次,需要在纯硬件的基础上实现什么功能?

    这三个问题对应的层次如何所示:

    在这里插入图片描述

    补充知识

    • 进程:表示一个程序的执行过程。执行前需要将该程序放到内存中,才能被CPU处理

    首先解决第一个问题:操作系统作为资源的管理者,需要提供/实现哪些功能。

    我们拿QQ进行视频聊天的工作过程来讲解:

    使用QQ的第一步,是在各个文件夹中找到QQ安装的位置,操作系统将逐层打开文件夹,这一步涉及文件管理;第二步,就是运行QQ.exe,在这一步,操作系统会把该程序的相关数据放入到内存中,并决定放在内存中的位置,这一步涉及存储器管理(内存管理);第三步就是将QQ程序放入等待队列中,之后对应的进程将被放进处理机(CPU)中处理,这一步涉及处理机管理;最后一步,当我们需要打开摄像头跟朋友聊天的时候,操作系统会将摄像头设备分配给该进程,在摄像头使用完成后还要进行资源回收,这一步涉及设备管理。对于整个流程,操作系统必须保证这些行为都是安全高效

    总结如下图所示:
    在这里插入图片描述

    其次是第二个问题:操作系统作为用户与计算机硬件之间的接口,要为其上层的用户、应用程序提供简单易用的服务,需要实现什么功能。

    想要解决这一个问题,操作系统需要提供以下三个功能:

    • 命令接口:允许用户直接使用
    • 程序接口:允许用户通过程序间接使用
    • GUI:现代操作系统中最流行的图形用户接口

    命令接口和程序接口可以统称为用户接口,在考研当中,这两种功能经常考察

    以下是图示:

    在这里插入图片描述

    命令接口是允许用户直接使用的,其分为联机命令接口脱机命令接口

    其中,联机命令接口的特点是:用户说一句,系统做一句。而脱机命令接口的特点是:用户说一堆,系统做一堆

    下面拿两个例子来解释联机命令接口和脱机命令接口:

    例1:在Windows操作系统中,我们可以打开cmd窗口,输入time指令,窗口会返回当前系统时间,并且将操作权限返还给用户,用户随后可以设置一个新的时间。这就是一个典型的联机命令接口,或者叫交互式命令接口。

    例2:还是以Windows为例,使用Windows的搜索功能,在C盘中搜索并随便打开一个*.bat文件,可以看到里面编写着一系列的指令,文件本身就相当于一个指令清单,双击该文件,操作系统就会根据用户给出的这些一系列的指令,一条一条往下执行。这种就是典型的脱机命令接口实例,脱机命令接口也可以叫批处理命令接口

    聊完了命令接口,接下来我们聊聊程序接口。

    再拿Windows为例,我们在操作系统中能经常看见*.dll文件,例如C:\Windows\System32目录下的user32.dll,允许程序员在程序中调用该文件,实现创建窗口等功能。该功能不是由程序员实现的,而是通过程序员编写的程序进行调用,实现间接使用。详细的调用过程就是调用系统调用的过程(关于系统调用的相关概念将会在后面学习到)。

    程序接口就是由一组系统调用组成的,大部分情况可以认为程序接口=系统调用

    注意,系统调用也可以称为广义指令系统调用命令

    在这里插入图片描述

    图形用户界面这里不多赘述,其目标就是为了用户能够更加方便地操作计算机。

    最后我们聊聊第三个问题:操作系统作为最接近硬件的层次,需要在纯硬件的基础上实现什么功能。

    在这一层面上看,操作系统需要实现的最主要功能就是实现对硬件及其的拓展。在没有任何软件支持的计算机(裸机)上安装的操作系统,要能够提供资源管理功能和方便用户的服务功能,将裸机改造成功能更强、使用更方便的机器。

    如果把计算机比喻成锤子、钉子、木头,那么操作系统就应该是优秀的工匠,操作系统将这些简单的原料组织成房子、帆船、匹诺曹等等,普通用户就可以直接使用工匠提供的房子、帆船、匹诺曹,而无需关心这些东西在底层是怎么组织起来的。

    小结

    下面对知识进行总结:

    在这里插入图片描述

    其中需要以后重点掌握的是关于资源管理的四个小方面,以及系统调用的相关知识。

    操作系统的特征

    操作系统主要由四个特征:并发共享虚拟异步。其中并发和共享是操作系统两个最基本的特征,二者也互为存在条件

    并发

    并发是指两个或多个时间在同一时间间隔内发生,这些事件宏观上是同时发生的,但微观上是交替发生的。

    注意把并发跟并行区分,后者指两个或多个事件在同一时刻同时发生

    通常,一个单核处理机(CPU)同一时刻只能执行一个程序,操作系统在这里的职责就是负责协调多个程序交替执行。事实上,操作系统就是伴随着“多道程序技术”而出现的,可以说,操作系统和程序并发是一起诞生的。当然,现在的CPU一般都是多核CPU。

    共享

    共享即资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。

    共享有两种方式:互斥共享和同时共享。

    • 互斥共享是指系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源
    • 同时共享是指系统中的某些资源,允许一个时间段内有多个进程”同时“对它们进行访问

    其实,同时共享中的”同时“,往往只能表示宏观层面,微观层面上这些进程可能是交替地进行对资源的访问(分时共享)

    下面拿两个案例来理解共享的两种方式:

    例1:使用QQ和微信进行视频聊天,同一时间段内摄像头只能分配给其中一个进程,这就是互斥共享;

    例2:使用QQ发送文件A,同时使用微信发送文件B。宏观上看,两边都在同时读取并发送文件,说明两个进程都在访问硬盘资源,从中读取数据。微观上看,两个进程是交替着访问硬盘的。这就是同时共享。

    关于并发和共享

    并发性指计算机系统中同时存在着多个运行着的程序。共享性是指系统中的资源可供内存中多个并发执行的进程共同使用。

    通过下面这个例子来看并发与共享的关系:

    使用QQ发送文件A,同时使用微信发送文件B。

    1.两个进程正在并发执行(并发性)

    2.需要共享地访问硬盘资源(共享性)

    如果失去并发性,则系统中只有一个程序正在运行,则共享性失去存在的意义;如果失去共享性,则QQ和微信不能同时访问硬盘资源,就无法实现同时发送文件,也就无法并发。

    虚拟

    虚拟是指把一个物理上的实体变为若干个逻辑上的对应物,前者(物理实体)是实际存在的,后者(逻辑对应物)是用户感受到的。

    下面用一个例子来理解虚拟:

    通过之前的学习我们知道,一个程序需要放入内存并给他分配CPU才能执行。假如说GTA5需要4GB的运行内存,QQ需要256MB的运行内存,网易云也需要256MB的运行内存,而我的电脑只有4GB的内存,但是却可以同时运行以上程序。问题来了:以上程序同时运行所需内存已经大于4GB了,为什么它们还可以同时运行在电脑上呢?原因就是操作系统采用了虚拟存储器技术。

    虚拟存储器技术其实就是虚拟技术中的”空分复用技术“,对于这个概念,这里只需了解,会在后续学习过程进行学习。

    再来一个例子:

    在一台单核CPU中,用户可以打开QQ、Chrome、QQ音乐等程序。一个程序需要被分配CPU才能运行,而单核CPU却能在电脑中同时运行多个程序,背后其实就是运用了虚拟处理器技术。

    虚拟处理器技术就是虚拟技术中典型的”时分复用技术“,在微观层面上处理机会在各个微小的时间段内交替着为各个进程服务。

    当然,虚拟往往也伴随着并发。

    异步

    异步是指,在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。

    这里拿一个老渣与两个女孩约会的例子来解释异步:

    在这里插入图片描述

    加入两个女孩都给老渣下达了两道命令,同时要求老渣陪其吃饭和把心给她,而老渣的心和老渣的人都只有一个,假如一开始跟一号吃饭,之后一号和二号同时要求老渣把心给她,那么老渣将有两种选择,所以会有不同的约会过程。

    老渣与与一号、二号的约会相当于对两个进程的处理,每个进程都有各自需要执行的指令。老渣的心相当于有限的系统资源。由于可分配的资源有限,进程的执行不是一贯到底的,而是走走停停的,以不可预知的速度向前推进。

    显然,如果失去了并发性,那么系统只能串行的处理每个进程,每个进程的执行会一贯到底,所以,只有系统拥有并发性,才可能导致异步性。

    小结

    下面对知识进行总结:

    在这里插入图片描述

    重要考点:

    • 理解并发和并行的区别
    • 并发和共享互为存在条件
    • 没有并发和共享,就谈不,上虚拟和异步,因此并发和共享是操作系统的两个最基本的特征

    操作系统的发展和分类

    手工操作阶段

    计算机刚被发明的时代的操作方式,那时并没有操作系统,程序员编写程序需要通过打孔机对纸带进行打孔,通过打孔与否区别二进制的1和0。机器读取纸带中的信息,并将其输入到计算机当中,计算机进行运算过后,CPU会将内存中的结果,操控机器对纸带打孔,进行结果输出。

    在这里插入图片描述

    主要缺点:用户独占主机、人机速度矛盾导致资源利用率极低

    批处理阶段

    单道批处理系统

    为了解决手工操作阶段暴露出的问题,人们引入了脱机输入/输出技术(用磁带完成),并使用**监督程序(操作系统雏形)**负责控制作业的输入、输出。

    程序员会事先将程序编写到纸带上,然后通过专门的外围控制机,把纸带机上的纸带的数据读到一个速度更快的磁带上,之后计算机直接从磁带上读取程序并处理,处理的结果将重新输送到磁带上,再通过外围控制机将结果输出到纸带上。

    在这里插入图片描述

    主要优点:缓解了一定程度的人机速度矛盾,资源利用率有所提升。

    主要缺点:内存中仅能有一道程序运行,只有该程序运行结束之后才能调入下一-道程序。CPU有大量的时间是在空闲等待I/0完成。资源利用率依然很低。

    多道批处理系统

    为了解决单道批处理系统所暴露的问题,人们发明了多道批处理系统。

    用户还是利用磁带将程序输入到计算机中,但是每次的传输将往内存传入多道程序,这些程序将在计算机中并发地执行。这个时候,操作系统正式诞生,并且引入了中断技术,由操作系统负责管理这些程序的运行。
    在这里插入图片描述

    主要优点:多道程序并发执行,共享计算机资源。资源利用率大幅提升,CPU和其他资源保持“忙碌”状态,系统吞吐量增大。

    主要缺点:用户响应时间长,没有人机交互功能,用户提交自己的作业之后就只能等待计算机处理完成,中间不能控制自己的作业执行。

    可以看到,并发和共享两大特性自操作系统诞生时就已存在

    两者的比较

    拿个例子来说明多道批处理系统相对于单道批处理系统,资源利用率为什么会大幅度提升。

    假设计算机需要处理三个作业:

    作业一:输入1秒,计算1秒,输出1秒
    作业二:输入1秒,计算1秒,输出1秒
    作业三:输入1秒,计算1秒,输出1秒

    若采用单道批处理技术:

    在这里插入图片描述

    采用多道批处理技术:

    在这里插入图片描述

    上诉两种比较很好的说明了单道批处理和多道批处理的区别,同时也要记住,操作系统的出现是在多道批处理阶段

    分时操作系统

    为了提供人机交互能力,人们发明了分时操作系统。计算机以时间片为单位轮流为各个用户/作业服务,各个用户可通过终端与计算机进行交互。

    比如时间片为50ms,那么计算机为一个用户服务50ms之后就会处理为下一个用户服务。在这50ms当中,用户都可以通过终端跟计算机进行交互。

    在这里插入图片描述

    主要优点:用户请求可以在对应的时间片内被即时响应,解决了人机交互问题。允许多个用户同时使用一台计算机,并且用户对计算机的操作相互独立,感受不到别人的存在。
    主要缺点:不能优先处理一些紧急任务。操作系统对各个用户/作业都是完全公平的,循环地为每个用户/作业服务一个时间片,不区分任务的紧急性。

    实时操作系统

    由于分时操作系统无法即使处理紧急任务的局限性,导致它无法被用于一些特别的场景,比如武器控制系统。所以人们发明了实时操作系统。在实时操作系统的控制下,计算机系统接收到外部信号后及时进行处理,并且要在严格的时限内处理完事件。该系统的特点时及时性可靠性

    实时操作系统主要分为硬实时系统软实时系统

    • 硬实时系统要求必须在绝对严格的规定时间内完成处理,如导弹控制系统、自动驾驶系统。
    • 软实时系统规定能接收偶尔违反时间规定,如12306火车订票系统

    主要优点:能够优先响应一些紧急任务,某些紧急任务不需要时间片排队。

    其他操作系统

    网络操作系统

    伴随着计算机网络的发展而诞生的,能把网络中各个计算机有机地结合起来,实现数据传送等功能,实现网络中各种资源的共享(如文件共享)和各台计算机之间的通信。(如Windows NT就是一种典型的网络操作系统,网站服务器就可以使用)

    分布式操作系统

    主要特点时分布性和并行性。系统中的和泰计算机地位相同,任何工作都可以分布在这些计算机上,由他们并行、协同完成这个任务。

    个人计算机操作系统

    如Windows XP、MacOS,方便个人使用

    小结

    在这里插入图片描述

    绿框部分是考研重点内容,整体重点理解各阶段的优点和缺点,各阶段的主要优点其实都是解决了上一阶段的主要缺点。

    操作系统的运行机制与体系结构

    运行机制

    两种指令

    在将指令的类别之前,我们先来认识什么叫指令:

    简单点来说,指令就是处理器(CPU)能识别、执行的最基本命令。

    一条高级语言的代码翻译过来可能会对应多条指令:

    在这里插入图片描述

    有的指令”人畜无害“,比如加减乘除这些普通的指令;有的指令拥有很高的权限,比如内存清零指令。如果操作系统允许任意的用户程序都可以无差别地使用系统指令,那么就意味着一个用户可以将其他用户地内存数据随意清零,这样做显然是不符合安全规范地。

    为了解决上述问题,我们需要将指令划分为两种类别,并对权限加以区分:

    • 特权指令:如内存清零指令,这类指令拥有很高的权限,不允许用户程序使用
    • 非特权指令:如普通的运算指令,允许用户程序使用
    两种处理器状态

    上面我们说到指令分为两种,随之而来的有一个新问题,CPU如何判断当前是否可以执行特权指令?

    为此,我们将处理器状态划分为两种:

    • 用户态(目态):如果CPU处于用户态,那么此时CPU只能执行非特权指令
    • 核心态(管态):如果CPU处于核心态,那么CPU特权指令和非特权指令都可以执行

    在系统中使用程序状态寄存器(PSW)中的某标志位来表示当前处理器处于什么状态。

    两种程序

    对于程序而言,有些程序可以同时使用非特权指令和特权指令,而有的程序只能只用非特权指令。根据程序所能使用指令级别的不同,我们把程序分为两种:

    • 内核程序:操作系统的内核程序是系统的管理者,既可以执行特权指令,又可以执行非特权指令,运行在核心态
    • 应用程序:只能执行非特权指令,运行在用户态
    小结

    在这里插入图片描述

    操作系统内核

    内核功能细分

    在我们安装完计算机的时候,可以发现操作系统给我们提供了多种多样的功能,比如“记事本”、”任务管理器“等等。然而,有些功能看起来并不是必不可少的,就像没有“任务管理器”,我们仍然可以使用计算机。可见,计算机内部的功能结构,也由核心与非核心之称。

    再来看之前的操作系统层次结构,这次我们把它再细分:

    在这里插入图片描述

    操作系统的功能分为内核功能非内核功能。其中内核是我们比较关注的,它是计算机上配置的底层软件,是操作系统最基本、最核心的部分。

    实现操作系统内核功能的那些程序就是内核程序

    内核主要分为两部分,一部分是对系统资源进行管理的功能,主要包括进程管理、存储器管理、设备管理等功能;另一部分主要包括时钟管理(实现计时功能)、中断处理、原语(一种特殊程序,是最接近硬件的部分,这种程序的运行具有原子性,涵括设备驱动、CPU切换等)

    原子性是指一但操作就必须执行完成,不可中断,否则回到执行之前的状态。

    小结

    在这里插入图片描述

    操作系统的体系结构

    上面我们说到操作系统有内核与非内核之分。

    需要注意的是:有些操作系统并没有把对系统资源进行管理的功能归为“内核功能”,也就是说,不同的操作系统对内核的划分并不严格一致。通常可以把内核包含了上述功能体系结构的称为大内核,内核没有把上述功能划分在内的体系结构称为微内核

    它们俩的区别:
    在这里插入图片描述

    操作系统的体系结构问题与企业的管理问题很相似:

    内核就是企业的管理层,负责一些重要的工作。只有管理层才能执行特权指令,普通员工只能执行非特权指令用户态核心态之间的切换相当于普通员工和管理层之间的工作交接大内核就相当于企业初创时体量不大,管理层的人会负责大部分的事情。优点是效率高;缺点是组织结构混乱,难以维护。微内核就相当于随着企业体量越来越大,管理层只负责最核心的一-些工作。优点是组织结构清晰,方便维护;缺点是效率低。

    小结

    在这里插入图片描述

    需要注意的是,操作系统体系结构之间的差别可能做作为选择题进行考察。

    中断和异常

    中断机制的诞生

    早期的计算机是采用串行机制处理程序的,一个程序进入计算机运行结束之后,只有等待I/O程序将结果输出,才能读取运行下一个程序:

    在这里插入图片描述

    这种方式的缺点显而易见:各程序只能穿行执行、资源利用率极低。

    为了解决上述问题,人们发明了操作系统(作为计算机的管理者),同时引入了中断机制,实现了多道程序并发执行(多道批处理阶段)。
    在这里插入图片描述

    中断的本质:发生中断就意味着需要操作系统介入开展管理工作

    中断的概念和作用

    中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。

    下面说说中断机制运行的例子:

    假如计算机中有三个进程,进程一运行过程中,CPU可能受到计时部件发出的中断信号(例如过了一个时间片),此时就意味着需要操作系统的介入,因此CPU的状态将切换到核心态,对中断进行处理;此时CPU的权限会移交给操作系统,操作系统的内核负责对中断信号进行处理。此时操作系统发现刚才的中断是表明进程一的时间片已用完,所以切换到进程2执行;之后操作系统会将CPU的使用权交还给用户进程,之后进程二就会在用户态下开始执行。

    假如进程二发出系统调用(内中断信号),请求输出数据,此时CPU的状态将切换到核心态,同时移交权限给操作系统,操作系统内核再次负责对中断信号的处理,并要求打印机要是工作,此时进程二暂停运行等待I/O完成,换进程三运行,此时CPU状态返回用户态。等到I/O完成,设备向CPU发出中断信号,CPU接收到I/O设备发来的而中断信号,切换到核心态对中断进程处理。操作系统内核再次对中断信号进程处理,此时因为进程2的I/O已经完成,所以操作系统会让进程二恢复运行,以完成后续工作。

    从上面的例子我们不难发现中断有三个特点:

    • 当中断发生时,CPU立即进入核心态
    • 当中断发生后,当前运行的进程暂停运行,并由操作系统内核对中断进行处理
    • 对于不同的中断信号,会进行不同的处理

    发生了中断,就意味着需要操作系统介入,开展管理工作。由于操作系统的管理工作(比如进程切换、分配I/O设备等)需要使用特权指令,因此CPU要从用户态转为核心态中断可以使CPU从用户态切换为核心态使操作系统获得计算机的控制权。有了中断,才能实现多道程序并发执行

    需要注意的是,中断是CPU从用户态切换到核心态的唯一途径,核心态切换用户态只需要通过执行一个特权指令,将PSW的标志位设置为表示“用户态”的标志位

    中断的分类

    中断主要分为内中断外中断,内中断也称为异常、例外、陷入,外中断可以简称为中断(狭义上的中断就是指外中断)。

    这两种中断的区分主要根据信号的来源是CPU的内部还是外部,内中断与当前执行的指令有关,外中断与当前执行的指令无关。

    内外中断还有下面的细分:

    在这里插入图片描述

    指令中断如:系统调用时使用的访管指令。硬件故障如:缺页。软件中断如:整数除0。

    外设请求如:I/O操作完成发出的中断信号。人工干预如:用户强行终止有个进程。

    当然,有些书上也把中断做如下的细分:

    在这里插入图片描述

    但其实上面两种分类都是一样的,陷入值得就是有意为之的异常,比如系统调用;故障就是指由错误条件引起的,可能被故障处理程序修复,如缺页;终止就是无可恢复的致命错误造成的结果,终止处理程序不再将控制返回给引发终止的应用程序,如整数除0。

    外中断的处理过程

    下面拿一个案例来讲解外中断的处理过程:

    假如CPU正在执行某一个程序,这个程序有n条指令。CPU会按照顺序依次执行这些指令。并且它会遵循下面的步骤:

    1、在执行完每个指令之后,CPU都要检查当前是否有外部中断信号

    在这里插入图片描述

    2、如果没有检测到中断信号,则继续执行下一条指令;如果检测到外部中断信号,则需要保护被中断进程的CPU环境(如程序状态字PSW、程序计数器PC、各种通用寄存器)

    在这里插入图片描述

    3、根据中断信号类型转入相应的中断处理程序

    在这里插入图片描述

    4、恢复原进程的CPU环境并退出中断,返回原进程继续往下执行

    小结

    在这里插入图片描述

    其中,中断的概念和作用、中断的分类是考研的考点

    系统调用

    概念

    之前在介绍操作系统的概念时说到过操作系统在三个层次上应该实现的功能和目标,其中提到过在向用户提供一些简单易用的服务时,主要实现包括命令接口和程序接口,而程序接口就是由一组系统调用组成的。

    在这里插入图片描述

    系统调用是操作系统提供给应用程序(程序员/编程人员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以发出系统调用请求来获得操作系统的服务

    系统调用所解决的问题就是禁止多个进程随机调用计算机资源,转而由进程本身运行时只能通过系统调用的方式向操作系统发出请求,最后再由操作系统对哥哥请求进行协调管理。

    如果要来个官方一点的解释,那么应该这么说:应用程序通过系统调用请求操作系统的服务。系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作( 如存储分配、I/0操作、文件管理等),都必须通过系统调用的方式向操作系统提出服务请求,由操作系统代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。

    下面是系统调用的具体分类:

    在这里插入图片描述

    主要注意到的是:系统调用一般涉及对系统资源的管理、对进程的控制,而这些功能一般都是需要执行一些特权指令才能完成的,因此系统调用的相关处理需要在核心态下进行。

    系统调用与库函数的区别

    上面说过系统调用可以理解为是一种可供应用程序调用的特殊函数,但是它并不等同于我们开发过程中使用到的库函数。

    实际上,编写程序时可以通过汇编语言直接调用系统调用,也可以通过高级变成语言来实现相同的结果i,而平常我们所接触到的库函数,像C库这种其实也是在内部实现对系统调用的请求:

    在这里插入图片描述

    当然,不是所有的库函数都会使用到系统调用,比如“取绝对值”;判断库函数是否使用系统调用,可以通过是否涉及对计算机共享资源的操作进行简单判断

    系统调用背后的过程

    对于系统调用的过程,可以看下面这张图进行简单的理解:

    在这里插入图片描述

    这里的int指令的参数x指明了系统调用号(操作系统根据这个来进行系统调用),此处的int不是整形的意思,而是interrupt(中断)的缩写

    当执行了陷入指令之后(用户态,进行系统调用请求,引发内中断),CPU的控制权就被转交给操作系统(核心态),操作系统通过相应的系统调用对程序传入的参数进行处理,系统调用完成后又会返回之前的用户程序,继续执行下一条指令。可以概括成下面的过程:

    传递系统调用参数->执行陷入指令(用户态)->执行系统调用相应服务程序(核心态)->返回用户程序

    需要注意的是:陷入指令是唯一一个只能在用户态执行,而不可在核心态执行的指令

    小结

    在这里插入图片描述

    展开全文
  • 操作系统

    千次阅读 2020-12-23 12:42:57
    CPU调度:控制、协调进程对CPU的竞争;按一定的调度算法,从就绪...需要决策:给哪个进程分配哪个CPUCPU调度要解决的3个问题:what:按什么原则原则下一个要执行的进程,调度算法;when:合适选择,调度时机;how...

    CPU调度:控制、协调进程对CPU的竞争;按一定的调度算法,从就绪序列里选一个进程,把CPU的使用权交给被选中的进程;如果没有就绪进程,系统会安排一个系统空闲进程或idle进程;

    系统场景:N个进程就绪、等待上CPU运行;M个CPU,M>=1;需要决策:给哪个进程分配哪个CPU

    CPU调度要解决的3个问题:what:按什么原则原则下一个要执行的进程,调度算法;when:合适选择,调度时机;how:如何让被选中的进程上CPU运行,调度过程(进程的上下文切换)

    CPU调度时机:事件发生—-当前运行的进程暂停—-硬件机制响应后—-进入操作系统,处理相应的事件—-结束处理后:某些进程的状态会发生变化,也可能又创建了一些新的进程—-就绪队列改变了—-需要进程调度根据预设的调度算法从就绪队列选一个进程。包括下面4个情况:

    进程正常终止 或 由于某种错误终止

    新进程创建 或 一个等待进程变成就绪

    当一个进程从运行态进入等待态

    当一个进程从运行态变为就绪态

    调度过程——进程切换:一个进程让出CPU,另一个进程占用CPU的过程;包括了对原来运行进程各种状态的保存和对新的进程各种状态的恢复。切换时要做的两件事:

    1 切换全局页目录 以 加载一个新的地址空间

    2 切换内核栈和硬件上下文,其中硬件上下文包括了内核执行新进程需要的全部信息,如CPU相关寄存器

    上下文切换具体步骤:进程a下CPU,进程b上CPU

    保存进程a的上下文环境(程序计数器、程序状态字、其他寄存器)

    用新状态和其他相关信息更新进程a的PCB

    把进程a移至合适的队列(就绪、阻塞。。)

    将进程b的状态设置为运行态

    从进程b的PCB中恢复上下文(程序计数器、程序状态字、其他寄存器。。)

    上下文切换开销:直接开销:内核完成切换所用的CPU时间;间接开销:高速缓存cache、缓冲区缓存、TLB失效

    CPU调度算法衡量指标:

    吞吐量:每单位时间完成的进程数目

    周转时间:每个进程从提出请求到运行完成的时间

    响应时间:从提出请求到第一次回应的时间

    其他:CPU利用率,CPU做有效工作的时间比例;等待时间,每个进程在就绪队列中等待的时间

    进程优先级(数):

    优先级,反映紧迫程度;

    优先数,反映优先级,UNIX优先数小的优先级高;

    静态、动态优先级。等待久的动态优先级高

    抢占与非抢占:

    抢占:有高优先级进程就绪时,系统可以强行剥夺优先级低的进程的CPU给高优先级的进程先用

    不可抢占:除非自身放弃CPU,否则一直运行

    I/O密集型和CPU密集型:

    I/O密集型,I/O型,频繁进行I/O,通常会花很多时间等待I/O操作完成;一般的输入输出程序对i/o更友好

    CPU密集型,需要大量的CPU时间进行计算

    时间片

    一个时间段,分配给调度上CPU的进程,允许该进程运行的时间长度

    如何选择时间片:考虑进程切换开销、对响应时间的要求、就绪进程个数、CPU能力、进程的行为

    批处理系统中采用的调度算法:先来先服务、最短作业优先、最短剩余时间优先、最高响应比优先

    算法选择原则:吞吐量、周转时间、CPU利用率、公平服务

    先来先服务FCFS:先进先出,按照进程就绪的先后顺序使用CPU,非抢占

    公平,实现简单,长进程后的短进程需要等很长时间,不利于用户体验

    最短作业优先SJF:具有最短完成时间的进程优先执行,非抢占

    最短剩余时间优先SRTN:就是sjf的抢占式版本,当一个新就绪的进程比当前运行进程具有更短的完成时间时,系统抢占当前进程,选择新就绪的进程执行

    短作业优先调度算法:最短的平均周转时间(前提是所有进程同时可运行时);不公平(源源不断的短任务到来,可能使长的任务长时间得不到运行,产生饥饿现象

    最高响应比优先HRRN:折中权衡,先来先服务和短作业优先的取长补短

    调度时,先计算每个进程的响应比R;之后,总是选择R最高的进程执行

    响应比R=周转时间/处理时间=(处理时间+等待时间)/ 处理时间 = 1+(等待时间/处理时间)

    交互式系统中采用的调度算法:轮转调度、最高优先级调度、多级反馈队列,最短进程优先;追求指标:响应时间、公平平衡;

    时间片轮转调度算法:目标:为短任务改善平均响应时间,解决周期性切换,每个进程分配一个时间片,时钟中断–轮换。

    如何选择合适的时间片:太长–大于典型的交互时间–退化成先来先服务算法,延长短进程的响应时间;太短–小于典型的交互时间–进程切换浪费CPU时间;经验值50ms左右;

    时间片轮转算法优缺点:公平、有利于交互式计算、响应时间快、由于进程切换,时间片轮转算法要花费较高的开销、RR对不同大小的进程是有利的,但是对于大小相同的进程可能就不利了

    虚拟轮转算法:所有I/O型进程,从等待变成就绪时,进入辅助队列,调度算法在选择进程时,首先从辅助队列选择进程,直到辅助队列为空,再去执行就绪队列,改善了时间片轮转算法对I/O型进程的不公

    最高优先级调度算法:

    选择优先级最高的进程投入运行;

    系统进程一般高于用户进程;前台进程一般高于后台进程;操作系统更偏好i/o型进程;

    优先级可以是静态的,也可以是动态变化的:优先数可以决定优先级

    就绪队列可以安札优先级组织

    实现简单;不公平,容易导致优先级低的进程产生饥饿现象

    优先级反转问题:

    基于优先级的抢占式:一个低优先级进程占有一个高优先级进程所需要的资源,使得高优先级进程等待低优先级进程运行;

    影响:系统错误;高优先级进程停滞不前,导致系统性能降低

    解决方案:

    (1)设置优先级上限:凡是进入临界区的进程,给它个高的优先级,便于先执行完,把临界区的控制权还回去,不进临界区的,给个低优先级;

    (2)优先级继承:低的阻碍了高的,他可以继承这个高的优先级,先把任务执行完,把临界区还回去

    (3)使用中断禁止:凡是进入临界区的进程就不再响应中断了,直到他出了临界区才响应中断,就保护了这个进程,让他去执行,直到把临界区还回去

    多级反馈队列调度算法:

    设置多个就绪队列,第一级队列优先级最高

    给不同就绪队列中的进程分配长度不同的时间片,第一级队列时间片最小,级别降低,时间片变长

    第一级队列为空是,在第二级队列调度,以此类推

    每个队列都按照时间片轮转方式进行调度

    当一个新创建进程就绪后,都进入第一级队列

    当进程用完时间片,而放弃CPU,进入下一级就绪队列

    由于阻塞而放弃CPU的进程进入

    各种调度算法对比

    FCFS

    Round Robin

    SJF

    SRTN

    HRRN

    Feedback

    多处理器调度算法设计:

    不仅要决定选择哪个进程执行,还要决定在哪个CPU上执行;

    要考虑进程在多个CPU之间迁移时的开销,应该尽可能使进程总是在同一个CPU上执行,考虑负载均衡问题

    典型操作系统所采用的的调度算法:

    UNIX:动态优先数法

    5.3BSD:多级反馈队列法

    Linux:抢占式调度

    Windows:基于优先级的抢占式多任务调度

    Solaris:综合调度算法

    Linux调度算法的演化过程:

    Linux2.4简单的基于优先级调度

    Linux2.6 O(1)调度算法

    Linux2.6 SD调度器补丁

    Linux2.6 RSDL调度器补丁

    Linux2.6 CFS调度算法(完全公平调度算法)

    Windows的线程调度:

    调度单位是线程(因为Windows系统支持内核级线程)

    采用基于动态优先级的、抢占式调度,结合时间配额的调整

    基本思想:

    就绪线程按照优先级进入不同的就绪队列

    操作系统总是选择优先级最高的就绪线程运行

    同一优先级的各线程按时间片轮转进行调度

    多CPU系统中允许多个线程并行运行

    Windows线程调度:

    引发条线程调度的条件:一个线程的优先级改变了

    一个线程改变了他的亲和处理机集合

    线程正常终止 或 由于某种错误终止

    新线程创建 或 一个等待线程变成就绪

    当一个线程从运行态进入阻塞态

    当一个线程从运行态变成就绪态

    线程优先级:

    windows使用32个线程优先级,分成3类:

    16-31:实时优先级线程,一旦确定就不改变优先级了

    1-15:可变优先级:可以在一定范围内提升或降低,分为基本优先级、当前优先级

    0:零页线程:用于对系统中空闲物理页面清零

    时间配额:多给点时间配额,就像是给某个进程多点时间运行

    Windows线程调度策略:

    主动切换

    抢占:当线程被抢占时,它被放回相应优先级的就绪队列的队首;处于实时优先级的线程被抢占时,时间配额被重置为一个完整的时间配额,再次上CPU运行的时候运行的是一个完整的时间配额;处于可变优先级的线程在被抢占时,时间配额不变,重新得到CPU后将运行剩余的时间配额。区别出两种不同类型的线程

    时间配额用完:1

    2

    3线程a的优先级没有降低:如果队列中有其他就绪线程,选择下一个线程执行,a回到原来就绪队列末尾;如果队列中没有其他就绪线程,系统给线程a重新分配一个新的时间配额,让他继续运行;

    线程a的优先级降低了:Windows将选择一个更高优先级的线程去运行;

    线程优先级提升与时间配额调整:1

    2

    3提升线程的优先级

    给线程分配一个很大的时间配额

    提升线程的优先级:(只针对可变优先级线程)1

    2

    3

    4

    5

    6

    7

    8

    9I/O操作完成

    信号量或时间等待结束

    前台进程中的线程完成一个等待操作

    由于窗口活动而唤醒窗口线程

    线程处于就绪态超过了一定的时间还没有被调度运行(产生了饥饿现象)

    展开全文
  • 操作系统基本概念 什么是操作系统操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和它软件方便的接口和环境,是计算机系统中最基本的系统软件,...

    学生时代没有好好学习操作系统,悔不当初,现在重新捡起来看看,才发现日常有很多事情都可以解释了,例如为什么Linux快!并发是什么?操作系统到底干啥活,这篇blog是王道的学习笔记:

    • 操作系统基本概念,操作系统是干嘛的,提供什么服务,例如处理器管理【进程管理】、存储器管理【内存管理】、文件管理、设备管理【IO管理】
    • 操作系统的基本特征并发、共享、虚拟、异步,有了这些基本特征,操作系统才能提供如上的服务
    • 操作系统的发展历程,历史的变迁,纸带机时代、批处理时代、分时操作时代、实时操作时代
    • 操作系统的体系结构,非内核的GUI,内核的系统调用部分:进程管理、存储管理、设备管理,以及内核更底层的直接与硬件交互的时钟管理、中断处理、原语,重点介绍中断机制
    • 操作系统的调用,有用户图形界面GUI联机的CMD脱机的BAT批处理命令,还有咱写的代码做的程序调用,提到一个重点概念:系统调用

    在这里插入图片描述

    操作系统基本概念

    什么是操作系统,操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和它软件方便的接口和环境,是计算机系统中最基本的系统软件,总结一下就是:

    1. 操作系统(Operating System,简称 OS)是管理计算机硬件与软件资源的程序,是计算机系统的内核与基⽯,是计算机系统资源的总管理者:处理器管理【进程管理】、存储器管理【内存管理】、文件管理、设备管理【IO管理】
    2. 操作系统本质上是运⾏在计算机上的软件程序
    3. 操作系统为⽤户提供⼀个与系统交互的操作界⾯ ,向上层提供方便易用的服务
    4. 操作系统分内核与外壳(我们可以把外壳理解成围绕着内核的应⽤程序,⽽内核就是能操作硬件的程序)

    内核负责管理系统的进程、内存、设备驱动程序、⽂件和⽹络系统等等,决定着系统的性能和稳定性。是连接应⽤程序和硬件的桥梁。 内核就是操作系统背后⿊盒的核⼼

    在这里插入图片描述

    操作系统基本特征

    操作系统是一种系统软件,但与其他的系统软件和应用软件有很大的不同,他有自己的特殊性即基本特征,操作系统的基本特征包括并发、共享、虚拟和异步。并发性是之后的共享、虚拟和异步的基石。

    并发

    并发是指两个或多个事件在同一时间间隔内发生,在多道程序环境下,一段时间内宏观上有多个程序在同时执行,而在同一时刻,单处理器环境下实际上只有一个程序在执行,故微观上这些程序还是在分时的交替进行。操作系统的并发是通过分时得以实现的,和串行以及并行的概念区别

    • 串行顺序做不同事的能力:先洗衣服,洗完后做饭。弱鸡。
    • 并发交替做不同事的能力:一会儿洗衣服,一会儿做饭,交替执行,但快如闪电。洗衣服的是一个(cpu)做饭的是一个(cpu),所以多核的情况下会非常快,在同一个时间段内每个cpu各司其职团战。并发的实质是一个物理CPU(也可以多个物理CPU) 在若干道程序之间多路复用,并发性是对有限物理资源强制行使多用户共享以提高效率。
    • 并行同时做不同事的能力:左手洗衣服右手做饭,在同一时刻同时做两件事。单兵王。并行性指两个或两个以上事件或活动在同一时刻发生。在多道程序环境下,并行性使多个程序同一时刻可在不同CPU上同时执行。

    核心区别:并发关注的是资源充分利用(也就是不让cpu闲下来),并行关注的是一个任务被分解给多个执行者同时做,缩短这个任务的完成时间(也就是尽快做完这件事),操作系统的并发性是指计算机系统中同时存在多个运行着的程序,因此它具有处理和调度多个程序同时执行的能力。在操作系统中,引入进程的目的是使程序能并发执行。并行则是同时间同时刻有几个程序同时运行,有几核就就几个程序在并行。单核CPU只能并发多个程序,多核CPU可以并发也可以并行【4核CPU可以并行4个程序,程序大于核心时就需要用到并发性】

    共享

    共享,资源共享即共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。共享可以分为以下两种资源共享方式。

    • 互斥共享方式,系统中的某些资源,如打印机、磁带机,虽然他们可以提供给多个进程使用,但为使所打印的内容不致造成混淆,应规定在同时间段内只允许一个进程访问该资源。为此,当进程a访问某资源时,必须先提出请求,如果此时该资源空闲,系统便可将之分配给进程a使用,伺候若再有其他进程也要访问该资源(只要a未用完)则必须等待。仅当进程a访问完并释放该资源后,才允许另一进城对该资源进行访问。计算机系统中的大所属物理设备,以及某些软件中所用的栈、变量和表格,都属于临界资源,他们都要求被互斥的共享。
    • 同时访问方式,系统中还有一种资源,允许在一段时间内由多个进程“同时”对它进行访问。典型的可供多个进程同时访问的资源是磁盘设备,一些用重入码编写的文件也可以被“同时”共享,即若干个用户同时访问该文件。

    以上所谓的“同时”往往是宏观上的,而在微观上,这些进程可能是交替的对该资源进行访问即“分时共享”,并发和共享是操作系统两个最基本的特征,这两者之间又是互为存在条件的:1资源共享是以程序的并发为条件的,若系统不允许程序并发执行,则自然不存在资源共享的问题【QQ和微信如果不能并发同一时间只有一个资源也无需共享】;2若系统不能对资源共享实施有效地管理,也必将影响到程序的并发执行,甚至根本无法并发执行【QQ和微信如果不能共享则不能读取文件】。

    虚拟

    虚拟是指把一个物理上的实体变为若干个逻辑上的对应物。物理实体是实的,即实际存在的;而后者是虚的,是用户感觉上的事物。相应的,用于实现虚拟的技术,成为虚拟技术。在操作系统中利用了多种虚拟技术,分别用来实现虚拟处理器、虚拟内存和虚拟外部设备

    • 虚拟处理器:在虚拟处理器技术中,是通过多道程序设计技术,让多道程序并发执行的方法,来分时使用一台处理器的。此时,虽然只有一台处理器,但他能同时为多个用户服务,是每个终端用户都认为是有一个中央处理器在为他服务。利用多道程序设计技术,把一台物理上的CPU虚拟为多台逻辑上的CPU,称为虚拟处理器。时分复用技术
    • 虚拟存储器:可以通过虚拟存储器技术,将一台机器的物理存储器变为虚拟存储器,一边从逻辑上来扩充存储器的容量。当然, 这是用户所感觉到的内存容量是虚的,我们把用户所感觉的存储器称为虚拟存储器。空分复用技术
    • 虚拟外设:还可以通过虚拟设备技术,将一台物理IO设备虚拟为多台逻辑上的IO设备,并允许每个用户占用一台逻辑上的IO设备,这样便可使原来仅允许在一段时间内有一个用户访问的设备,变为在一段时间内允许多个用户同时访问的共享设备。

    因此操作系统的虚拟技术可归纳为:时分复用技术和空分复用技术

    异步

    在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。异步性使得操作系统运行在一种随机的环境下,可能导致进程产生于时间有关的错误。但是只要运行环境相同,操作系统必须保证多次运行进程,都获得相同的结果

    操作系统的发展与分类

    操作系统总共有如下几个发展阶段,按照时间线,下一个阶段的操作系统会解决上一个阶段的问题:

    • 1 手工操作阶段用纸带机,单个程序需要排队进入计算机计算,人机速度冲突,慢
    • 2 批处理阶段,批处理技术是指计算机系统对一批作业自动进行处理的一种技术。批处理阶段的特点是:用户不用与计算机直接打交道,而是通过专门的操作员来完成作业的输入输出。随着外围设备的迅速发展,后来又出现了脱机批处理系统,即主机直接与磁盘通信。操作系统出现
      • 单道批处理系统,脱机输入输出阶段,用磁带记录程序,然后用磁带读取,监督程序来控制程序读入,监督程序就是操作系统的雏形主要特点:自动性、顺序性、单道性。
      • 多道批处理系统,多道程序设计技术是指在计算机内存中同时存放几道相互独立的程序,它们在管理程序的控制下相互交替的运行。其特征是:多道,宏观上并行,微观上串行。但是不能与用户交互
    • 3 分时操作系统,所谓分时系统就是把处理器的运行时间分成很短的时间片,按时间片轮流把处理器分配给各联机作业使用。若某个作业再分配给他的时间片内不能完成其计算,则改作业暂时停止运行,把处理器让给其他作业使用,等待下一轮再继续运行,由于计算机速度很快,作业运行轮转的很快,给每个用户的感觉好像是自己独占一台计算机。但是不能确定哪个任务紧急,哪个优先级高
    • 4 实时操作系统,实时系统的主要特点是:实时性和可靠性,优先处理

    还有一些其他的操作系统,例如网络操作系统和分布式计算机系统,个人计算机操作系统

    操作系统体系结构

    计算机系统中,通常CPU执行两种不同性质的程序,一种是操作系统内核程序;另一种是用户自编程序或系统外层的应用程序。前者是后者的管理者和控制者,因此“管理程序”要执行一些特权指令,而“被管理程序”出于安全性考虑,不能执行这些指令。所谓特权指令,是指计算集中不允许用户直接使用的指令,如IO指令、中断指令。操作系统在具体实现上划分了用户态和核心态,以严格区分两种类程序。
    在这里插入图片描述
    内核是计算机上配置的最底层软件,是计算机功能的眼神。不同系统对内核的定义稍有区别,大多数操作系统内核包括四个方面的内容

    • 最底层与硬件关联交紧密的模块,诸如时钟管理程序中断处理程序设备驱动程序等处于最底层。Linux内核,微内核体系只包含这一部分
    • 其次是运行频率较高的程序,诸如进程管理、存储器管理和设备管理等。基于Linux内核的CentOS、Ubuntu,大内核体系包含底层交互和这一部分

    这两部分内容构成了操作系统的内核。它们的指令操作工作在核心态

    • 时钟管理,时钟管理有两个功能:计时,操作系统需要通过时钟管理,向用户提供标准的系统时间;进程切换,在分时操作系统中,采用时间片轮转调度的实现;在实时系统中,按截止时间控制运行的实现;在批处理系统中,通过时钟管理来衡量一个作业的运行程度等。
    • 中断处理,负责实现中断机制,提高多道程序运行环境中CPU的利用率,而且主要是针对外部设备的。后来的到发展,形成了多种类等,成为操作系统各项操作的基础。例如键盘或鼠标信息的输入、进程的管理和调度、系统功能的调用、设备驱动、文件访问等,无不依赖于中断机制。可以说,现代计算机系统是靠中断驱动的软件。
    • 原语,按层次结构涉及的操作系统,底层必然是一些可被调用的公用小程序,他们各自完成一个规定的操作。其特点是:
      • 1.他们处于操作系统的最底层,是最接近硬件的部分
      • 2.这些程序的运行具有原子性——其操作只能一起合成
      • 3.这些程序的运行时间都较短,而且调用频繁。

    系统中用来登记状态信息的数据结构很多。比如作业控制块、进程控制块、设备控制块、各类链表、消息队列、缓冲区、空闲区登记表、内存分配表等。为了实现有效地管理 ,系统需要一些基本的操作,常见的操作有以下三种,依据微内核还是大内核体系区分工作在用户态和核心态:

    • 进程管理:进程状态管理、进程调度和分配、创建与撤掉进程控制块的队列维护操作等。
    • 存储器管理:存储器的空间分配和回收管理、内存信息保护程序、代码对换程序等。
    • 设备管理:缓冲区管理、设备分配和回收等。

    从上述内容可以了解,核心态指令实际上包括系统调用类指令和一些针对时钟、中断和原语的操作指令。

    用户态和核心态

    根据进程访问资源的特点,我们可以把进程在系统上的运⾏分为两个级别:

    1. ⽤户态(user mode) : ⽤户态运⾏的进程或可以直接读取⽤户程序的数据。
    2. 核心态(kernel mode):可以简单的理解核心态运⾏的进程或程序⼏乎可以访问计算机的任何资源,不受限制

    用户态和核心态的调用切换是需要CPU切换的,是会消耗资源的。

    特权指令

    所谓特权指令是指有特殊权限的指令,由于这类指令的权限最大,如果使用不当,就会破坏系统或其他用户信息。为了保证系统安全,这类指令只能用于操作系统或其他系统软件,不直接提供给用户使用,主要用于系统资源的分配和管理,包括改变系统的工作方式,检测用户的访问权限,修改虚拟存储器管理的段表、页表等。在某些用户的计算机系统中,为了统一管理各种外部设备,输入输出指令也作为特权指令,不允许用户直接使用。需要输入输出操作时,必须通过系统调用,经由操作系统完成

    为了防止用户系统中使用特权指令,用户态下只能使用除特权指令以外的指令,核心态下可以使用全部指令。所以把用户程序放在用户态下进行,而操作系统中必须使用特权指令的那部分程序在核心态下运行,保证了计算机系统的安全可靠。从用户态转换为核心态的唯一途径就是终端或异常

    大内核和微内核

    大内核例如Linux、Unix系统,包含底层硬件交互的:原语、时钟管理、中断和系统调用类指令【进程管理、存储器管理、设备管理】等功能:

    • 优点:高性能,CPU不需要频繁的切换用户态和内核态
    • 缺点:包含模块多,内部结构混乱,不易维护

    微内核例如windows系统,只包含底层硬件交互的:原语、时钟管理、中断部分模块,其它系统调用类指令都在用户态

    • 优点:包含模块少,内部结构清晰,容易维护
    • 缺点:需要频繁在核心态和用户态之间切换CPU,性能低

    CPU的状态转换是有成本的,所以频繁切换对性能有很高的影响

    操作系统的中断

    中断是让操作系统从应用程序手中夺回CPU控制权的唯一方式

    • 内中断:内中断、例外或陷入。指源自CPU执行指令内部的时间,如程序的非法操作码、地址越界、算数溢出、虚存系统的缺页以及专门的陷入指令等引起的时间。对异常的处理一般要依赖与当前程序的运行现场,而且异常不能被屏蔽,一旦出现异常立即处理
    • 外中断:与当前CPU执行的指令无关,指令来自CPU执行指令以外的事件发生,例如时钟中断IO中断

    时钟+外中断组合起来是分时复用CPU的基石,中断处理依赖中断向量表,当中断发生时找到对应中断向量表确认执行哪种中断。

    操作系统的调用

    调用操作系统,也就是和操作系统交互一般有如下四种调用方式,区分为用户直接调用软件/程序员间接调用,用户有三种直接和操作系统交互的方式,

    • GUI用户图形界面,也就是window可视化的操作系统
    • 联机命令接口,也就是我们的CMD小黑窗,可以一行行的敲的即时指令
    • 脱机命令接口,也即批处理命令接口,我们安装的服务器,经常能看到的bat格式的文件,就是一批指令的集合文件

    软件/程序员有一种方式可以调用

    • 程序接口:通过写代码进行调用,例如我们使用C语言使用的库函数printf,而printf的实现调用了操作系统的相关接口,调集了显示器内存等资源最终把内容打印在屏幕上

    调用这里有一些区分,在程序接口调用的时候有一个概念叫做系统调用

    系统调用

    我们运⾏的程序基本都是运⾏在⽤户态,如果我们调⽤操作系统提供的核心态级别的⼦功能,就需要系统调⽤了
    在这里插入图片描述
    在我们运⾏的⽤户程序中,凡是与共享资源有关的操作(如⽂件管理、进程控制、内存管理、文件管理等),都必须通过系统调⽤⽅式向操作系统提出服务请求,并由操作系统代为完成。这些系统调⽤按功能⼤致可分为如下⼏类:

    • 设备管理。完成设备的请求或释放,以及设备启动等功能。
    • ⽂件管理。完成⽂件的读、写、创建及删除等功能。
    • 进程控制。完成进程的创建、撤销、阻塞及唤醒等功能。
    • 进程通信。完成进程之间的消息传递或信号传递等功能。
    • 内存管理。完成内存的分配、回收以及获取作业占⽤内存区⼤⼩及地址等功能。

    这样可以保证系统的稳定性和安全性。系统调用有以下流程:

    • 执行传参指令,将系统调用需要参数传递,发现特权指令
    • 执行陷入指令,引发内中断,因此转入内中断相应处理程序,也就是系统调用入口
    • CPU切换到核心态
    • 依据参数执行系统调用,执行特权指令,执行完成
    • CPU转回用户态

    系统调用结束,可以看的出,这里用到了内中断

    展开全文
  • 1.操作系统是一种____. A.通用软件 B.操作系统 C.应用软件 D.软件包 答:b 2.操作系统的___管理部分负责对进程进行调度. A.主存储器 B.控制器 C.运算器 D.处理机 答:D 3.操作系统是对___进行管理的软件. A.软件 B....
  • 2.1 操作系统的目标和功能 2.2 操作系统的发展史 2.3 主要成就 2.4 现代操作系统的特征 2.5 容错性 2.6 多处理器和多核操作系统设计考虑因素 2.7 微软Windows系统简介 2.8 传统的UNIX系统 2.9 现代UNIX系统 2.10 ...
  • Linux是实时系统还是分时操作系统?

    千次阅读 2021-06-18 00:12:05
    关注+星标公众号,不错过精彩内容编排 |strongerHuang微信公众号 |嵌入式专栏我们平时分享的µC/OS、FreeRTOS、RT-Thread、ThreadX这些都是实时操作...
  • 操作系统课程设计 生产者消费者实验报告 一、实验目的 加深对进程概念的理解,明确进程与程序的区别。 认识并发执行的本质。 理解和掌握Linux和Windows进程通信系统调用的功能,通过实验和学习,提高对进程痛惜系统...
  • 操作系统(OS) 笔记根据B站王道计算机考研——操作系统视频整理所得,视频链接:https://b23.tv/0I2qex 视频中所用课件:链接:https://pan.baidu.com/s/101bFWm0Tv0emNpEneidYPA 提取码:y3dd 1.计算机...
  • 计算机操作系统

    千次阅读 2021-07-13 02:43:47
    spContent=Windows、Linux、Andriod、iOS,以及不久前横空出世的鸿蒙,都是操作系统。你几乎每天都在使用操作系统,可是你有没有想过,操作系统是如何设计实现出来的呢?本课程将带你深入剖析操作系统各个管理模块的...
  • Windows系统用户为了获得更快,更好的计算机性能可能会经常重新安装操作...本文就“未找到操作系统”错误问题的原因和修复方案提出了详细解释和分析。导致未找到系统错误的原因当计算机启动时,BIOS将在硬盘驱动器上...
  • 汇总了【100道】与操作系统相关论文选题,为广大毕业生和职称者推荐操作系统专业论文选题,解决在校大学生不知道操作系统毕业论文题目如何定等相关问题!一、比较好写的操作系统论文题目:1、基于Linux操作系统的设备...
  • 常见物联网操作系统介绍

    千次阅读 多人点赞 2021-10-09 15:06:38
    物联网操作系统是运行在物联网设备上的...相比之下,物联网操作系统领域的碎片化问题则非常严重,并没有哪几个操作系统占据绝对优势,正处于“百花齐放、百家争鸣”的阶段。 大部分物联网操作系统是从嵌入式操作系...
  • 国产自主操作系统:凝思磐石安全操作系统发布时间:2014-08-23 09:11:50来源:红联作者:heriver凝思磐石安全操作系统采用Linux内核,是中国拥有自主产权的国产操作系统之一,应用在重大行业中,虽然普通个人用户较少...
  • UOS统一操作系统已经正式发布了,但是根据多人使用来看,UOS仍然存在着不少的问题,请用户不断的接收系统更新来完善。请先看统一桌面和服务器操作系统UOS 20正式版发布,附新特性/新特点介绍一文。在使用UOS统一操作...
  • 但是在大家的讨论中,很多人对于鸿蒙操作系统都是一知半解,这样一来网友的一些评论就会让很多人对于鸿蒙操作系统造成一些误解,今天,凉风就专门来写一篇文章来给大家解答一下关于鸿蒙操作系统的那些问题。...
  • 操作系统存储管理

    千次阅读 多人点赞 2021-10-24 09:11:23
    系统区通常位于内存的低地址部分,用于存放操作系统相关数据;用户区用于存放用户进程相关数据。 内存中只能有一道用户程序,用户程序独占整个用户区空间。 优点:实现简单;无外部碎片;可以采用覆盖技术扩充内存;...
  • 生产者-消费者问题1 实验内容及要求2 实验环境3 实验设计3.1 问题描述3.2 基本思想3.2.1 生产者线程...4、程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。 2 实验环境 windows 10,Visual Studi
  • 本章节将介绍各类操作系统的特点。 裸机系统 单片机的程序可以分为三种:轮循系统、前后台系统和多任务系统。 轮询系统 即在裸机编程时,先初始化相关硬件,让主程序在一个死循环里面不断循环,顺序地处理各种事件。...
  • 操作系统原理:文件系统

    千次阅读 多人点赞 2021-05-24 21:21:54
    文件系统是一种用于持久性存储的系统抽象。... 文件描述符是操作系统为每个进程维护维护的一个打开文件表的索引。需要元数据来对文件进行有效的管理,元数据包括文件指针来执行最后一次读写位置,文件...
  • 操作系统》考前秘籍

    千次阅读 热门讨论 2021-05-28 21:29:36
    期末知识点复习 整理与往年卷子,copy过来,加深一点印象 通道能够完成(CPU与主存)之间数据的传输。 通道是独立于CPU的、专门负责数据共享以及传输工作的处理单元。...一个系统中可设立三种
  • 计算机操作系统复习知识点大集合

    千次阅读 多人点赞 2020-12-19 18:45:41
    文章目录一、绪论1、操作系统的定义2、操作系统的特征3、操作系统的功能4、操作系统的分类 一、绪论 1、操作系统的定义 操作系统是将系统中的各种软、硬资源有机地组合成一个整体,合理地组织计算机的工作流程,为...
  • 下面由秋天网 Qiutian.ZqNF.Com小编为大家整理了计算机操作系统组成部分的相关知识,希望对大家有帮助!计算机操作系统组成部分:硬件计算机硬件由运算器、控制器、存储器、输入设备、输出设备五部分组成.1.运算器是...
  • 操作系统 我看的第一本操作系统书是《现代操作系统》,这本书也是大家力推的入门操作系统的教材,有很多常见的面试题都基本是出自这里的,比如哲学家就餐、读者写者等问题。如果单纯看书觉得比较枯燥,可以搭配 B ...
  • 操作系统:考研核心笔记

    千次阅读 多人点赞 2021-01-05 15:34:35
    文章目录前言第一章:概述第一章命题重点:并行性与并发性操作系统的特征操作系统的功能操作系统的接口用户态与核心态中断、异常中断处理和子程序调用的区别系统调用什么时候需要进行系统调用?系统调用的过程?第二章...
  • 前言:该系列文章为笔者学习清华大学《操作系统原理》相关课程笔记,参考书籍《操作系统概念》《现代操作系统等》。如果涉及相关书籍或课程版权,联系即删~ 《操作系统原理》学习笔记:第2章 操作系统基础操作2.1 ...
  • 汽车操作系统最新研究

    千次阅读 2021-07-25 11:52:28
    前言 软件定义汽车背景下,操作系统是汽车生态发展的灵魂。随着汽车电动化、智能化、网联化的发展,汽车操作系统已经成为车辆中重要的组成部分之一,一定程度上决定了车辆的... 汽车操作系统包括安全车载操作系统...
  • 操作系统:文件系统的实现

    千次阅读 2020-12-31 14:39:13
    目录一、文件系统结构二、文件系统实现1.概述2.虚拟文件系统三、目录实现1.线性列表2.哈希表四、磁盘空间的分配方法1.连续分配2.链接分配3.索引分配五、磁盘空闲空间的管理1.位向量2.链表3.组4.计数六、文件系统的...
  • 王道考研 操作系统学习笔记(复习用): 课程链接:https://www.bilibili.com/video/BV1YE411D7nH 1.1.1: 介绍操作系统的定义,可理解为软硬件中间层,管理处理机、存储器、文件、设备四大资源。 1.1.2: 操作系统...
  • 操作系统MOOC课后习题答案

    千次阅读 2021-03-25 18:35:21
    1.1 什么是操作系统随堂测验 1、操作系统的核心目标是()。 A、管理硬件 B、运行程序 C、让用户方便使用 D、提高CPU利用率 答案:B 2、从设备到本地缓冲之间传输数据由()完成。 A、I/O控制器 B、CPU C、设备机械...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,812,913
精华内容 725,165
关键字:

操作系统相关问题