计算机基础
计算机基础
cmyang1. 硬件组成
1945年-科学家冯·诺依曼提了一种计算机设计实现架构
五大组成部分:运算器、控制器、存储器、输入设备、输出设备
- 控制器 Control Unit 简称 【CU】,用于控制其他组件的运行
- 运算器 Arithmetic/Logic Unit 简称 【ALU】,用来完成各种二进制编码做算术运算和逻辑运算,控制器+运算器=CPU
- 存储器 用来存取数据,内存,外存
- 输入设备 计算机接收外界输入数据的工具,比如键盘、鼠标、麦克风、触摸屏、手写输入板,游戏杆等
- 输出设备 计算机向外输出数据的工具,比如显示器、音响、打印机等
2. 操作系统
操作系统用于管理计算机中所有的硬件和软件,用户通过操作系统来使用计算机硬件
核心功能:
- 进程管理:操作系统为进程分配任务,解决处理器的调度、分配和回收等
- 处理器管理:CPU的管理和分配,比如分配进程,CPU调度执行
- 内存管理:内存的管理和分配,比如给程序分配内存和释放内存
- 外存管理:持久化存储的管理和分配,比如磁盘文件读写
- I/O管理:输入/输出设备的管理,比如键盘输入和网络收发
2.1 进程
一个具有独立功能的程序,对某个数据集在处理机上的执行过程,也是操作系统分配资源的基本单位
操作系统给进程抽象了专门的数据结构:进程控制块(Process Control Block 简称 PCB),在操作系统代码中是一个结构体:struct task_struct{...}
,创建进程时建立PCB,伴随进程运行的全过程,直到进程撤销而撤销。
PCB包含的进程信息:
- 程序ID(PID、进程句柄):每一个进程都必须对应一个唯一PID,一般是整形数字
- 特征信息:一般分系统进程、用户进程、或者内核进程等
- 进程状态:运行、就绪、阻塞,表示进程当前的运行情况
- 优先级:表示获得CPU控制权的优先级大小
- 提供进程管理、调度所需要的信息
进程状态:
- 新建态: 进程正在被创建,操作系统为进程分配资源,初始化PCB
- 就绪态: 具备运行条件,但没有空闲的CPU导致不能运行
- 运行态: 占有CPU,并在CPU上运行指令
- 阻塞态: 等待某一事件而暂时不能运行
- 退出态: 从系统中退出,操作系统会回收进程拥有的资源、撤销PCB
进程与线程
- 进程本质上是一个独立执行的程序,进程是操作系统进行资源分配和调度的基本概念,操作系统进行资源分配和调度的一个独立单位
- 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位
- 一个进程中可以并发多个线程,每条线程执行不同的任务,切换受系统控制
- 进程拥有多个线程的时候,这些线程会共享相同的虚拟内存和全局变量资源,这些资源在上下文切换时不需要修改
- 同进程内的线程切换,要比多进程间的切换消耗更少的资源
子进程
- 进程一般由OS内核创建,一个进程也可以去创建另一个进程,这个去创建进程称为父进程,被创建进程称为子进程
- Nginx的master-worker进程
- worker是处理真正的请求的,而master负责监控worker进程是否在正常工作
2.2 进程调度算法
- 进程调度类型
- 非抢占式调度 Nonpreemptive:
- 处理机分配给某进程后,进程就会一直运行,直到该进程【完成】或【阻塞】时才会把 CPU 让给其他进程
- 主要用于【批处理系统】和某些对【实时性要求不严】的系统
- 抢占式调度 Preemptive
- 暂停某个正在执行的进程,将已分配给该进程的处理机重新分配给另一个进程
- 主要用于比较严格的【实时系统】中
- 非抢占式调度 Nonpreemptive:
- 先来先服务调度算法(FCFS,first come first served,非抢占式)
- 按照作业/进程到达的先后顺序进行调度
- 排在长进程后的短进程的等待时间长,不利于短作业/进程
- 短作业优先调度算法(SJF, Shortest Job First,非抢占式)
- 预计执行时间短的进程优先分派处理机,短进程/作业
- 缩短进程的等待时间,提高系统的吞吐量
- 高响应比优先调度算法(HRRN,Highest Response Ratio Next,非抢占式)
- 优先权=响应比=(等待时间+要求服务时间)/要求服务时间
- 计算优先权信息,增加了系统的开销
- 时间片轮转调度算法(RR,Round-Robin,抢占式)
- FCFS 的方式按时间片轮流使用CPU 的调度方式,让每个进程在一定时间间隔内都可以得到响应
- 由于高频率的进程切换,会增加了开销,且不区分任务的紧急程度
- 优先级调度算法(Priority Scheduling ,有抢占式和非抢占式)
- 根据任务的紧急程度进行调度,高优先级的先处理,低优先级的慢处理
- 通常使用【动态优先级】,如果高优先级任务很多且持续产生,那低优先级的就可能很慢才被处理,优先级因素:进程的等待时间、已使用的处理机时间或其他资源的使用情况
- 多级反馈队列调度算法(Multilevel Feedback Queue,抢占式)
- 多级:表示有多个队列,每个队列优先级从高到低,同时优先级越高时间片越短
- 高优先级队列中已没有调度的进程,则调度次优先级队列中的进程
- 对同个队列中的各个进程,按照时间片轮转法调度
- 反馈:表示如果有新的进程加入优先级高的队列时,立刻停止当前正在运行的进程,转而去运行优先级高的队列
一个好的调度算法考虑以下几个方面
- 公平-保证每个进程得到合理的CPU时间
- 高效- 使CPU保持忙碌状态,总是有进程在CPU上运行
- 响应时间 -使交互用户的响应时间尽可能短
- 周转时间:使批处理用户等待输出的时间尽可能短
- 吞吐量-使单位时间内处理的进程数量尽可能多
不同系统和版本支持的调度算法
- UNIX采用动态优先队列调度
- BSD采用多级反馈队列调度
- Windows采用抢先多任务调度