一、简介篇
1.解释一下什么是操作系统
(1)操作系统是管理硬件和软件的一种应用程序
(2)操作系统是运行在计算机上最重要的一种软件,它管理计算机的资源和进程以及所有的硬件和软件。
(3)它为计算机硬件和软件提供了一种中间层,使应用软件和硬件进行分离,让我们无需关注硬件的实现,
把关注点更多放在软件应用上
(4)通常情况下,计算机上会运行着许多应用程序,它们都需要对内存和CPU进行交互,操作系统的目的
就是为了保证这些访问和交互能够准确无误的进行
2.操作系统的主要功能
(1)进程管理:主要作用就是任务调度,在单核处理器下,操作系统会为每个进程分配一个任务,进程管理的
工作十分简单;而在多核处理器下,操作系统除了要为进程分配任务外,还要解决处理器的调度、分配和
回收等问题
(2)内存管理:主要是操作系统管理内存的分配和回收,在进程需要时分配内存以及在进程完成时回收内存,
协调内存资源,通过合理的页面置换算法进行页面的换入换出
(3)文件管理:有效地管理文件的存储空间,合理地在组织和管理文件系统,为文件访问和文件保护提供更
有效地方法及手段
(4)设备管理:根据确定的设备分配原则对设备进行分配,使设备与主机能够并行工作,为用户提供良好的
设备使用界面
(5)提供用户接口:提供了访问应用程序和硬件的接口,使用户能够通过应用程序发起系统调用从而操纵
硬件,实现想要的功能
3.软件访问硬件的几种方式
软件访问硬件其实就是一种I/O操作,软件访问硬件的方式也就是IO操作的方式有哪些
选择和衡量I/O控制方式的原则:
数据传送速度足够快,能满足用户的需求但又不丢失数据
系统开销小,所需地处理控制程序少
能充分发挥硬件资源的能力,使I/O设备尽可能忙,而CPU等待时间尽可能少
以CPU为中心,数据传送通过一段程序来实现:
(1)直接访问:由用户进程直接控制主存或CPU和外围设备之间的信息传送,直接程序控制方式又
称为忙/等待方式
(2)中断驱动:为了减少程序直接控制方式下CPU的等待时间以及提高系统的并行程度,系统引入了中断
机制。中断机制引入后,外围设备仅当操作正常结束或异常结束时才向CPU发出中断请求。
在I/O设备输入每个数据的过程中,由于无需CPU的干预,一定程度上实现了CPU与I/O
设备的并行工作
采用硬件方法:
(3)DMA直接内存访问:为了进一步减少CPU对I/O操作的干预,防止因并行操作设备过多使CPU来不及处理
或因速度不匹配而造成的数据丢失现象,引入了DMA控制方式
(4)通道控制方式:通道是独立于CPU的专门负责输入输出控制的处理机,它控制设备与内存直接进行
数据交换。有自己的通道指令,这些指令由CPU启动,并在操作结束时向CPU发出
中断信号
4.操作系统的主要目的是什么
(1)管理计算机资源,这些资源包括CPU、内存、磁盘驱动器、打印机等
(2)提供一种图形界面,提供了用户和计算机之间的桥梁
(3)为其他软件提供服务,操作系统与软件进行交互,以便为其分配运行所需的任何必要资源
5.为什么Linux系统下的应用程序不能直接在Windows下运行
(1)Linux系统和Windows系统的格式不同,格式就是协议,就是在固定位置有意义的数据。
Linux下的可执行程序文件格式是elf 而Windows下的可执行程序是PE格式,它
是一种可移植的可执行文件
(2)Linux系统和Windows系统的API不同,这个API指的就是操作系统的API,Linux中的
API被称为系统调用,是通过 int 0x80 这个软中断实现的。而Windows中的API是放
在动态链接库文件中的,也就是DDL(里面包含代码和数据)。Linux中的可执行程序获得
系统资源的方法和Windows不一样,所以显然是不能在Windows中运行的
6.什么是用户态和内核态
用户态和内核态是操作系统的两种运行状态
(1)内核态:处于内核态的CPU可以访问任意的数据,包括外围设备,比如网卡、硬盘等,处于内核态的
CPU可以从一个程序切换到另外一个程序,并且占用CPU不会发生抢占情况,一般处于特权级0的状态
我们称之为内核态
(2)用户态:处于用户态的CPU只能受限的访问内存,并且不允许访问外围设备,用户态下的CPU不允许
独占,也就是说CPU能够被其他程序获取
7.用户态和内核态如何切换
所有的用户进程都是运行在用户态的,用户程序的访问能力有限,一些比较重要的比如从硬盘读取数据,从
键盘获取数据的操作则是内核态才能做的事情,而这些数据却又对用户程序来说非常中要,所以就设计到两
种模式下的切换
用户态发生系统调用/异常/外围设备的中断,就会切换到内核态去执行处理,处理结束后又切换到用户态
8.什么是内核
在计算机中,内核是一个计算机程序,它是操作系统的核心,可以控制操作系统中所有的内容
二、进程和线程篇
1.多处理系统的优势
(1)多处理器系统的吞吐量比较高,多处理器系统拥有多个并行的处理器
(2)多处理器由于可以共享资源,因此可以开源节流,省钱,整个系统的可靠性也随之提高
2.什么是进程表
操作系统为了跟踪每个进程的活动状态,维护了一个进程表。
在进程表内部,列出了每个进程的状态以及每个进程使用的资源等
3.什么是进程、线程,已经它们之间的区别
(1)进程是一段正在执行的程序代码,是操作系统进行资源分配和调度的最小单位
(2)线程是进程中的单条流向,每个进程可以分为多个线程,线程是操作系统执行的最小单位
(3)线程不像进程那样具有很强的独立性,线程之间会共享数据
(4)创建线程的开销要比进程小的多,因为创建线程仅仅需要堆栈指针和程序计数器就可以了,而创建
进程需要操作系统分配新的地址空间、数据资源等,开销比较大
4.什么是上下文切换
(1)上下文切换是一种将CPU资源从一个进程分配给另一个进程的机制
(2)从用户角度看,计算机能够并行运行多个进程,这恰恰是操作系统通过快速上下文切换造成的结果
(3)在切换过程中,操作系统需要先存储当前进程的状态(包括内存空间的指针,当前执行完的指令等等),
再读入下一个进程的状态,然后执行此进程
5.使用多线程的好处
(1)能够提高对用户的响应速度
(2)可以实现线程间的资源共享
6.进程终止的方式
(1)正常退出:多数进程由于完成了工作而终止。当编译器完成了所给定程序的编译之后,会执行一个
系统调用告诉操作系统它完成了工作。
(2)错误退出:发现了严重错误而退出。
(3)严重错误:由进程引起的错误,通常是程序中的错误所导致的。例如执行了一条非法执行,引入不
存在的内存,或者除数是0等。
(4)被其他进程杀死:某个进程执行系统调用告诉操作系统杀死某个进程
7.进程间的通信方式
(1)消息传递:是进程间实现通信和同步等待的机制,使用消息传递,进程间的交流不需要共享变量直接
就可以进行通信;消息传递分为发送方和接收方
(2)先进先出队列:指的是两个不相关联进程间的通信,两个进程之间可以彼此相互进程通信,这是一种
全双工通信方式
(3)管道:用于两个相关进程之间的通信,这是一种半双工的通信方式,如果需要全双工,需要另外一个管道
(4)直接通信:在这种进程通信方式中,进程与进程之间只存在一条链接,进程间要明确通信双方的命名
(5)间接通信:是通信双方不会建立直接连接,而是找到一个中介者,这个中介者可能是个对象等等,进程
可以在其中放置消息,并且可以从中删除消息,以此达到进程间通信的目的
(6)消息队列:是内核中存储消息的链表,它由消息队列标识符进行标识,这种方式能够在不同进程之间
提供全双工通信连接
(7)共享内存:是使用所有进程之间的内存来建立连接,这种类型需要同步进程访问来相互保护
8.进程状态模型
(1)新建态:进程刚创建出来的时候
(2)就绪态:指的是可运行,但因为其他进程正在运行而处于就绪状态
(3)运行态:指的是进程实际占用CPU时间片运行时
(4)阻塞态:指的是不具备运行条件,正在等待被CPU调度
(5)终止态:指的是进程执行完毕,到达结束点或者一位内错误而不得不终止进程
三、内存管理篇
1.什么是按需分页
(1)在操作系统中,进程是以页为单位加载到内存中的,按需分页是一种虚拟内存的管理方式
(2)在使用请求分页的系统中,只有在尝试访问页面所在的磁盘并且该页面尚未在内存时,也就是发生了
缺页异常,操作系统才会将磁盘页面复制到内存中
2.什么是虚拟内存
(1)虚拟内存是一种内存分配方案,是一项可以用来辅助内存分配的机制
(2)使用虚拟内存就实现了可以同时加载多个应用程序,提高内存空间利用率
(3)物理内存本身是不限制访问的,任何地址都可以读写,这样就存在安全问题
(4)直接使用物理内存会存在进程间的安全问题,各个进程间没有独立的地址空间,一个进程由于执行
错误指令或是恶意代码都可以直接修改其它进程的数据,甚至修改内核地址空间的数据
3.虚拟内存的实现方式
虚拟内存中,允许将一个作业分多次调入内存。采用连续分配方式时,会使相当一部分内存空间都处于暂时
或永久的空闲状态,造成内存资源的严重浪费,而且也无法从逻辑上扩大内存容量。因此,虚拟内存的实现
方式需要建立在离散分配的内存管理方式的基础上。有以下三种方式:
(1)请求分页存储管理
(2)请求分段存储管理
(3)请求段页式存储管理
4.内存为什么分段
(1)使程序可以重定位,避免两个相同程序编译出来的地址相同而导致无法运行的情况
(2)为了能够访问到所有的内存
四、文件系统篇
1.提高文件系统性能的方式
(1)高速缓存
(1)最常用的减少磁盘访问次数的技术是使用块高速缓存或者缓冲区高速缓存
(2)高速缓存指的是一系列的块,它们逻辑上数于磁盘,但实际基于性能的考虑被保护在内存中
(3)检查全部的读请求,查看在高速缓存中是否有所需要的块。如果存在,可执行读操作而无需访问磁盘。
如果检查块不再高速缓存中,那么首先把它读入高速缓存,再复制到所需要的地方。之后对同一个块
的请求都通过告诉缓存来完成。
(4)由于在高速缓存中有许多块,所以需要某种方法快速确定所需的块是否存在。常用方法是将设备和磁盘
地址进行散列操作。然后在散列表中查找结果。具有相同散列值的块在一个链表中连接在一起这样就可以
沿着冲突链查找其他块。
(5)如果告诉缓存已满,此时需要调入新的块,则要把原来的某一块调出高速缓存,如果要调出的块在上次
调入后已经被修改过,则需要把它写回磁盘。
(2)块提前读
(1)在需要用到块之前试图提前将其写入高速缓存从而提高命中率。
(2)许多文件都是顺序读取,如果请求文件系统在某个文件中生成块k,文件系统执行相关操作并且在完成
之后,会检查高速缓存,以便确定块k+1是否已经在告诉缓存中。如果不在,文件系统会为k+1安排一个
预读取。
(3)只适用于实际顺序读取的文件,对随机访问的文件不适用
(3)减少磁臂运动
(1)把有可能顺序访问的块放在一起,从而减少磁盘臂的移动次数
(4)磁盘碎片整理
(1)移动文件使它们相互挨着,并把所有的至少是大部分的空闲空间放在一个或多个大的连续区域内
2.RAID的不同级别
RAID称为磁盘冗余阵列。简称磁盘阵列。利用虚拟化技术把多个硬盘结合在一起,成为一个或多个磁盘
阵列组,目的是提高性能或数据冗余。
(1)RAID 0 - 无容错的条带化磁盘阵列
(2)RAID 1 - 镜像和双工
(3)RAID 2 - 内存式纠错码
(4)RAID 3 - 比特交错奇偶校验
(5)RAID 4 - 块交错奇偶校验
(6)RAID 5 - 块交错分布式奇偶校验
(7)RAID 6 - P + Q冗余
五、IO篇
1.操作系统的时钟是什么
时钟也被称为计时器,负责维护时间、防止一个进程长期占用CPU时间等其他功能
2.中断处理的过程
3.什么是DMA
(1)DMA的中文是直接内存访问,它意味着CPU授予IO模式权限在不涉及CPU的情况下读取或写入内存
(2)也就是DMA不需要CPU的参与
(3)由于DMA设备可以直接在内存之间传输数据,而不是使用CPU作为中介,因此可以缓解总线上的拥塞
(4)DMA通过允许CPU执行任务,同时DMA系统通过系统和内存总线传输数据来提高系统的并发性
4.直接访问内存的特点
(1)数据传送以数据块为基本单位
(2)所传送的数据从设备直接送入主存,或者从主存直接输出到设备上
(3)仅在传送数据块开始和结束时才需要CPU的干预,而整块数据的传送则是在控制器的控制下完成
六、死锁篇
1.什么是僵尸进程
(1)是指已完成且处于终止状态,但在进程表中却仍然存在的进程
(2)僵尸进程通常发生在父子关系的进程中,由于父进程仍需要读取子进程的退出状态所导致的
2.死锁产生的原因
(1)资源竞争
(2)程序执行顺序不当
3.死锁产生的必要条件
(1)同一时刻只能有一个进程访问某个资源
(2)一个资源在等待某个资源时,不是放已经占有的资源
(3)分配给一个进程的资源除非他自己释放,不能被其他进程抢占
(4)形成首尾相连的循环等待
4.死锁的恢复方式
(1)通过抢占恢复:将某个进程的资源强制取走给其他进程使用,使用完又送回
(2)通过回滚恢复:为了进行恢复,要回滚到上一个较早的检查点,此时可以对资源再次进行分配
(3)杀死进程恢复:直接杀死一个进程