很久很久很久没有看过操作系统了,一边看一边整理吧…
操作系统复习
1. 操作系统基础
1.1 什么是操作系统
操作系统是一个运行在计算机上的软件程序,用来管理计算机硬件与软件资源。管理的功能是通过操作系统的核心部分**内核(Kernel)**来实现的,主要负责系统的内存管理,硬件设备管理、文件系统管理以及应用程序的管理。
内核是连接应用程序和硬件的桥梁,决定系统的性能和稳定性。
1.2 系统调用
操作系统中的状态分成管态(核心态)和目态(用户态),用户态中的进程只能读取用户程序的数据,而核心态中的进程可以访问计算机中的任何资源。
系统调用指的是当用户态的进程要访问与核心态相关的资源时,就需要通过系统调用来完成。
也就是说系统调用给用户进程提供了一个访问核心资源的接口。
- 系统调用的分类
1.设备管理。完成设备的请求或释放,以及设备启动等功能。
2.文件管理。完成文件的读、写、创建及删除等功能。
3.进程控制。完成进程的创建、撤销、阻塞及唤醒等功能。
4.进程通信。完成进程之间的消息传递或信号传递等功能。
5.内存管理。完成内存的分配、回收以及获取作业占用内存区大小及地址等功能。
2. 进程和线程
2.1 线程和进程的区别
首先,线程是由进程划分的更小的运行单位,线程是进程的一部分,一个进程可以有多个线程,一个线程只能属于一个进程;
其次,进程之间是相互独立、互不影响的,而同一个进程中的线程可能会相互影响;
最后,线程是cpu调度和分派的最小单位,进程是资源分配的最小单位。
一篇将进程和线程关系讲的很清晰的小漫画
2.2 进程有哪几种状态
进程的状态可以分成以下五种:
- 创建状态(new):进程正在创建,尚未就绪;
- 就绪状态(ready):一切准备就绪,就差cpu给我使用权了;
- 运行状态(running):进程正在处理器上运行(同一时刻运行的最大进程数和cpu核数相同);
- 阻塞状态(waiting):等待达到其他可运行条件,即使处理器空闲也无法运行的一个状态;
(就绪是只差cpu,cpu来了就能运行;阻塞是差其他资源,即使有cpu也不能运行)- 结束状态(terminated):进程从系统中消失,可能是正常结束,也可能是发生中断而退出。
上个状态之间的转换图吧!
2.3 进程之间的通信方式
进程间的五种通信方式:
- 管道(无名管道和命名管道):管道其实是一个数据缓冲区,类似于一个队列,一端用来输入,一端用来输出。也就是说进程从输入端写入数据,从输出端读取数据。
- 无名管道只局限于有血缘关系的进程(父子进程、兄弟进程)之间的通信;
- 有名管道可以实现任意两个进程之间的通信,只要知道管道的名字即可。
- 信号量:信号量的本质是一个程序计数器,用来控制多个进程对共享数据的访问,不能实现进程间的消息传递。
在一个进程访问共享数据之前,需要先检查信号量,当信号量是正数时表示该共享数据可用,进程得到数据并将信号量-1;当信号量为0时表示共享资源不可用,此时进程阻塞,直到有其他进程退出临界区。- 消息队列:消息队列是消息的链接表,具有特定的格式,存放在内核中。不随着进程的消亡而消亡,可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。
- 共享内存:多个进程可以访问同一块内存空间,不同进程可以及时看到其他进程对共享内存中数据的更新。实现这种方式需要借助互斥锁或者信号量等保证数据修改的隔离性。
- 套接字:主要用于在客户端和服务器之间通过网络进行通信。套接字:IP地址+端口号
2.4 线程间的同步方式
线程同步指的是保证两个或多个共享资源的线程能够并发执行,且不产生资源冲突。一般有三种方式实现线程同步:
- 互斥量(Mutex):互斥量其实就是一种加锁的操作,通过加锁使得线程对公共资源的访问是互斥的,也就是同一个时刻只能有一个线程持有该锁。
- 信号量(Semphares):和进程通信方式中的信号量是一样的,就是设置一个同一时刻访问该资源的最大线程数量。
- 事件(Event):通过通知操作的方式来保持多线程同步(Wait()/Notify()/NotifyAll()等)。
2.5 进程的调度算法
进程调度算法是为了确定进程的执行顺序,以实现最优作业完成顺序情况下,提高CPU的利用率。
- 先来先服务:从就绪队列中选择一个最先进入该队列的进程为之分配资源,使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用 CPU 时再重新调度。
- 短作业优先:从就绪队列中选出一个估计运行时间最短的进程为之分配资源,使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用 CPU 时再重新调度。
- 时间片轮转:时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法,又称 RR(Round robin)调度。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。
- 多级反馈队列调度:将等待队列划分不同的优先级,先处理优先级高的队列中的进程,当低级队列中进程等待时间较长时,可以把它挪到优先级较高的队列中。多级反馈队列调度算法既能使高优先级的作业得到响应又能使短作业(进程)迅速完成。
- 优先级调度:为每个流程分配优先级,首先执行具有最高优先级的进程,依此类推。具有相同优先级的进程以 FCFS 方式执行。可以根据内存要求,时间要求或任何其他资源要求来确定优先级。