操作系统的四个特性
- 并发: 同一段时间内多个程序执行(注意区别并行和并发,前者是同一时刻的多个事件,后者是同一时间段内的多个事件),有句话总结的好,并行是等于号=,并发是大于号>。
- 共享: 系统中的资源可以被内存中多个并发执行的进线程共同使用
- 虚拟: 通过时分复用(如分时系统)以及空分复用(如虚拟内存)技术实现把一个物理实体虚拟为多个
- 异步: 系统中的进程是以走走停停的方式执行的,且以一种不可预知的速度推进
操作系统的主要功能
- 进程管理: 包括进程控制,进程同步,进程通信和进程调度
- 内存管理: 内存分配,内存保护,地址映射,内存扩充
- 设备管理: 管理所有外围设备,包括完成用户的IO请求,为用户进程分配IO设备,提高IO设备利用率,提高IO速度,方便IO的使用
- 文件管理: 管理用户文件和系统文件,包括磁盘存储空间管理,目录管理,文件读写管理以及文件共享和保护
进程状态转换
- 新建态:进程刚刚创建成功,没有被提交执行,而是在等待操作系统完成创建进程的必要操作
- 运行态:占有处理器正在运行
- 就绪态:具备运行条件,等待系统分配处理器以便运行
- 阻塞态:不具备运行条件,正在等待某个事件的完成
- 结束态:运行结束
进程与线程的区别
- 进程是资源分配的最小单位,线程是程序执行的最小单位
- 一个程序至少有一个进程,一个进程至少有一个线程,线程共享整个进程的资源
进程通信的几种方式
- 管道pipe:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
- 命名管道FIFO:命名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
- 消息队列MessageQueue:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
- 共享存储SharedMemory:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
- 信号量Semaphore:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
- 套接字Socket:套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
- 信号sinal:信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
进程同步
- 生产者-消费者问题
- 哲学家进餐问题
- 读者-写者问题
用户态和核心态的区别
运行在用户态下的程序不能直接访问操作系统内核数据结构和程序
用户态切换到内核态的3种方式
- 系统调用:这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作。
- 异常:当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。
- 外围设备的中断:当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。
导致死锁的四个必要条件。
- 互斥条件:进程对所分配到的资源不允许其他进程进行访问
- 不可剥夺条件:是指进程已获得的资源,在未完成使用之前,不可被剥夺,只能在使用完后自己释放
- 请求与保持条件:已经得到资源的进程可以再次申请新的资源
- 循环等待条件:系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源
进程调度算法
- 先来先服务调度算法FCFS:按进程到达的先后顺序依次调度
- 短作业优先调度算法SJF:就绪队列中选择估计时间最短的作业进行处理,直到得出结果或者无法继续执行
- 高响应比算法HRN: 响应比=(等待时间+要求服务时间)/要求服务时间,优先执行响应比高的作业
- 时间片轮转:按照先进先出的规则给进程分配时间片,时间片结束后不管有没有执行完,都将执行下一进程。
- 优先级:优先执行优先级高的作业。
- 多级反馈队列调度算法:设置多个就绪队列并为每个队列设置不同的优先级,第一个队列优先级最高,其余依次递减。优先级越高的队列分配的时间片越短,进程到达之后按FCFS放入第一个队列,如果调度执行后没有完成,那么放到第二个队列尾部等待调度,如果第二次调度仍然没有完成,放入第三队列尾部……只有当前一个队列为空的时候才会去调度下一个队列的进程。
内存连续分配方式采用的几种算法
- 首次适应(First Fit)算法: 空闲分区以地址递增的次序链接。分配内存时顺序查找,找到大小能满足要求的第一个空闲分区。
- 最佳适应(Best Fit)算法: 空闲分区按容量递增形成分区链,找到第一个能满足要求的空闲分区。
- 最坏适应(Worst Fit)算法: 又称最大适应(Largest Fit)算法,空闲分区以容量递减的次序链接。找到第一个能满足要求的空闲分区,也就是挑选出最大的分区。
内存管理方式
- 基本分页储存管理方式
- 基本分段储存管理方式
页面置换算法
- 最佳置换算法:将当前页面中在未来最长时间内不会被访问的页置换出去,不太可能实现的算法。
- 先进先出置换算法:每次淘汰最早调入的页面。
- 最近未使用算法NRU:页面设置一个访问位,并将页面链接为一个环形队列,页面被访问的时候访问位设置为1。页面置换的时候,如果当前指针所指页面访问位为0,那么置换,否则将其置为0,循环直到遇到一个访问位为0的页面。
- 最近最久未使用算法LRU:算法赋予每个页面一个访问字段,用来记录上次页面被访问到现在所经历的时间t,每次置换的时候把t值最大的页面置换出去。
- 最少使用算法LFU: 设置寄存器记录页面被访问次数,每次置换的时候置换当前访问次数最少的。