保研复习——操作系统重点
Posted 牧空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了保研复习——操作系统重点相关的知识,希望对你有一定的参考价值。
一、绪论
1、 用户态和核心态区别
内核态(Kernel Mode):运行操作系统程序,操作硬件
用户态(User Mode):运行用户程序
-
内核态与用户态是操作系统的两种运行级别,当程序运行在最低特权级别时,就可以称之为运行在用户态。因为这是最低特权级,是普通的用户进程运行的特权级,大部分用户直接面对的程序都是运行在用户态;当程序运行在0级特权级上时,就可以称之为运行在内核态。
-
运行在用户态下的程序不能直接访问操作系统内核数据结构和程序。当我们在系统中执行一个程序时,大部分时间是运行在用户态下的,在其需要操作系统帮助完成某些它没有权力和能力完成的工作时就会切换到内核态(比如操作硬件)。
-
这两种状态的主要差别是
- 处于用户态执行时,进程所能访问的内存空间和对象受到限制,其所处于占有的处理器是可被抢占的
- 处于内核态执行时,则能访问所有的内存空间和对象,且所占有的处理器是不允许被抢占的。
2、异常和中断的区别
异常(内中断)
- 是指由于 执行了现行指令(CPU 内部事件)所引起的中断,如程序出错(非法指令、地址越界)
中断(外中断)
- 是指由于外部设备事件所引起的中断,如通常的磁盘中断、打印机中断等
通常异常会引起中断,但中断未必会是由异常引起
3、系统调用
操作系统提供的用户接口之一,是由操作系统实现的所有系统调用所构成的集合,即程序接口或应用编程接口,是应用程序用系统之间的接口。
4、并发性和并行性
并发性:指两个或多个事件在同一时间间隔内发生
并行性:指两个或多个事件在同一时刻发生
1、线程与进程的区别
-
一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程依赖于进程而存在。
-
进程在执行过程中拥有独立的内存单元,而多个线程共享进程的内存。(资源分配给进程,同一进程的所有线程共享该进程的所有资源。同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量。)
-
进程是资源分配的最小单位,线程是CPU调度的最小单位;
-
系统开销: 由于在创建或撤消进程时,系统都要为之分配或回收资源,如内存空间、I/O设备等。因此,操作系统所付出的开销将显著地大于在创建或撤消线程时的开销。类似地,在进行进程切换时,涉及到整个当前进程CPU环境的保存以及新被调度运行的进程的CPU环境的设置。而线程切换只须保存和设置少量寄存器的内容,并不涉及存储器管理方面的操作。可见,进程切换的开销也远大于线程切换的开销。
-
通信:由于同一进程中的多个线程具有相同的地址空间,致使它们之间的同步和通信的实现,也变得比较容易。进程间通信IPC,需要进程同步和互斥手段的辅助,以保证数据的一致性;线程间可以直接读写进程数据段(如全局变量)来进行通信。在有的系统中,线程的切换、同步和通信都无须操作系统内核的干预
-
进程编程调试简单可靠性高,但是创建销毁开销大;线程正相反,开销小,切换速度快,但是编程调试相对复杂。
-
进程间不会相互影响 ;线程一个线程挂掉将导致整个进程挂掉
-
进程适应于多核、多机分布;线程适用于多核
2、进程的通信方式有哪些
1)管道
-
匿名管道
- 匿名管道是基于文件描述符的通信方式。实现两个进程间的通信时必须通过fork创建子进程,实现父子进程之间的通信。本质是内核的一块缓存(环形队列)。
- 读写规则
- 管道内没有数据时,读端(read)发生阻塞,等待有效数据进行读取
- 管道容量被数据填满时,写端(write)发生阻塞,等待进程将数据读走再进行写入
- 如果所有管道写端对应的文件描述符被关闭,read返回0,但会将之前管道里的数据读完
- 如果所有管道的读端对应的文件描述符被关闭,write操作会产生信号,SIGPIPE,进而导致write进程退出
- 当要写入的数据量不大于管道的容量(PIPE_BUF)时,linux将保证写入的原子性
- 当要写入的数据量大于管道容量(PIPE_BUF)时,linux将不再保证写入的原子性
- 特点
- 只能进行单向通信
- 只能够用于血缘关系的进程之间,多用于父子之间
- 管道内部自带同步机制:子进程写一条,父进程读一条
- 管道在进行通信的时候,对外层提供的服务叫做面向字节流的服务
- 当进程退出之时,管道也随之释放,与文件保持一致
-
命名管道
- 概念:本质上是一个管道文件,可以通过命令创建也可以通过函数创建,用户可以看到
- 特点
- 可以进行不相干进程间的通信
- 命名管道是一个文件,对于文件的相关操作对其同样使用
- 读写规则
- 对于管道文件,当前进程操作为只读时,则进行阻塞,直至有进程对其写入数据
- 对于管道文件,当前进程操作为只写时,则进行阻塞,直至有进程从管道中读取数据
2)系统IPC:
2.1)消息队列
- 消息队列是存放在内核中的消息链表,每个消息队列由消息队列标识符表示
- 与管道不同的是消息队列存放在内核中,只有在内核重启或者显式地删除一个消息队列时,该消息队列才会被真正的删除
- 消息队列在某个进程往一个队列写入消息之前,并不需要另外某个进程在该队列上等待消息到达
特点:
- 消息队列是消息的链表,具有特定的格式,存放在内存中并由消息队列标识符标识.
- 消息队列允许一个或多个进程向它写入与读取消息
- 管道和消息队列的通信数据都是先进先出的原则。
- 消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取.比FIFO更有优势。
- 消息队列克服了信号承载信息量少,管道只能承载无格式字 节流以及缓冲区大小受限等缺。
- 目前主要有两种类型的消息队列:POSIX消息队列以及System V消息队列,System V消息队列目前被大量使用。System V消息队列是随内核持续的,只有在内核重起或者人工删除时,该消息队列才会被删除。
2.2)信号量semaphore
信号量(semaphore)与已经介绍过的 IPC 结构不同,它是一个计数器,可以用来控制多个进程对共享资源的访问。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。
特点:
-
信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。
-
信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作。
-
每次对信号量的 PV 操作不仅限于对信号量值加 1 或减 1,而且可以加减任意正整数。
-
支持信号量组。
2.3)信号signal
信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
2.4)共享内存(Shared Memory)
它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据得更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等
特点:
1)共享内存是最快的一种IPC,因为进程是直接对内存进行存取
2)因为多个进程可以同时操作,所以需要进行同步
3)信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问
3)套接字SOCKET:
socket也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同主机之间的进程通信。
3、什么是死锁?死锁产生的条件?
定义:如果一组进程中的每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那么改组进程是死锁的
现象:多个进程再运行过程中因争夺资源而造成的一种僵局
产生的必要条件
- 互斥条件:指进程对所分配到的资源进行排它性使用 。
- 请求和保持条件:指进程已经保持了至少一个资源,但又提出了新的资源请求 。
- 不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
- 环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链 。(充分条件)
解决死锁的方法
- 预防死锁:破坏四个必要条件中的一个或多个
- 避免死锁:在资源动态分配过程中,使用某种方法去防止系统进入不安全的状态
- 检测死锁:检测死锁的发生,并确定与死锁有关的进程和资源
- 解除死锁:外力解脱。常用撤销或挂起一些进程
4、分页和分段有什么区别?
段是信息的逻辑单位,它是根据用户的需要划分的,因此段对用户是可见的 ;页是信息的物理单位,是为了管理主存的方便而划分的,对用户是透明的。
段的大小不固定,有它所完成的功能决定;页大大小固定,由系统决定
段向用户提供二维地址空间;页向用户提供的是一维地址空间
段是信息的逻辑单位,便于存储保护和信息的共享,页的保护和共享受到限制。
段页式
先分段、再分页
5、操作系统进程调度策略
FCFS(先来先服务),优先级,时间片轮转,多级反馈
以上是关于保研复习——操作系统重点的主要内容,如果未能解决你的问题,请参考以下文章