操作系统学习笔记

操作系统是管理计算机硬件和软件资源,并且提供用户交互的软件系统 常见操作系统有Windows,Linux,Android 操作系统具备管理计算机资源的功能,具备抽象计算机资源的能力,能和用户进行交互 操作系统实质上是一个很复杂的控制软件,可以管理应用,资源管理,管理外设等等 操作系统的架构的层次是在硬件之上,应用之下 OS Kernel:可并发(同时存在多个运行的应用)。可共享,可虚拟,可异步 微内核:尽可能将内核功能移植到用户空间,缺点就是性能低 外核和内核:一个负责硬件,一个负责软件 DISK(硬盘存储):存储OS BIOS:基本I/O处理系统(加载外设以及加载软件来运行OS) (basic I/O system) BootLoader:加载OS POST(加电自检,查找显卡和执行BIOS) 系统调度:来源于“合法”的应用向系统发出服务请求的(同步或者异布) 异常:来源于“不良”的应用非法指令(或者应用意想不到的请求,应用无法获得资源需求)(同步) 中断:来源于外设对于硬件设备和网络中断(异步) 逻辑化地址空间,独立地址空间,可访问相同内存,更多内存空间(虚拟化) 物理地址空间:硬件支持的地址空间 逻辑地址空间:应用程序拥有的内存范围 操作系统为了运行多个程序,进行了内存地址的隔离(分配独立的虚拟内存地址),虚拟内存地址和物理内存地址是映射关系 应用逻辑地址映射到物理地址 CPU需要逻辑地址上的内存内容(ALU),内存管理单元(MMU)寻找逻辑地址和物理地址之间的映射,控制器将从总线发送物理地址的内存内容的请求 内存发送物理地址内存内容给CPU(告诉CPU,物理地址找到了),建立逻辑地址和物理地址之间的映射(确保应用互不干扰) 虚拟地址和物理地址的映射关系管理 内存分段(内存被看成一组不同长度的段) 内存分段下的虚拟地址分为段选择⼦和段内偏移量 段选择⼦保存在段寄存器中,段选择⼦其中的段号被用于段表的索引,段表中保存的是这个段的基地址和段界限等等 而段内偏移量是位于0和段界限之间的,如果段内偏移量合法,那么段内偏移量加段的基地址得到物理内存地址 分段的内存碎片问题,如果某个程序占用了128mb内存,然后该程序被关闭了,释放128mb内存,如果这个128mb内存不是连续的,而是被分段了,这将导致没有内存空间打开另一个内存占用128mb的程序 内存分页(将物理内存和虚拟内存切成一段段固定大小的内存空间) 内存分页解决了内存分段的内存碎片问题,其释放内存是以页为单位释放的,当内存空间不够,会释放其他正在运行的进程的没使用的内存页面 内存分页下的虚拟地址被分为页号和页内偏移,页好为页表的索引,页表保存着物理页的所在物理内存的基地址,基地址和页内偏移组成物理内存地址 内存分页的缺点就是在运行多线程时,页表会非常大,所以出现了多级⻚表(将页表分成一级一级的) 段⻚式内存管理(内存分段和内存分页的结合体) 先将内存分为多个段,再将每个端分为多个页,地址通过段号,段内⻚号和⻚内位移组成 连续性内存管理(内存碎片和分区的动态分配) 外部碎片:在分配单元间的未使用内存 内部碎片:在分配单元中的未使用内存 当一个应用被批准运行在内存中时,分配一个连续的区间,来给运行的应用访问数据 动态分配的策略:当想分配某字节,先从低地址找,找到第一个被某字节大的空闲块,就使用它 动态分配的缺点就是外部碎片严重 非连续内存分配 分段Segmentation: 逻辑地址空间连续,物理地址离散 一个段表示一个内存块,一个逻辑地址空间,应用访问内存地址的时候,需要个二维的二元组 虚拟内存: 早期内存不够应用消耗,应用的规模比存储器的容器大 当应用太大,超出内存,可采用手动的覆盖(overlay) 技术,只把需要的指令和数据保存在内存中 当应用太多,超出内存,可采用自动的交换(swapping) 技术,把暂时不能执行的程序送到外存(磁盘)中 进程和线程: 进程状态(state),线程(thread),进程间通信(inter-process communication),进程互斥与同步,死锁(deadlock) 进程包含正在运行的应用的全部状态信息 进程可动态化创建,结束进程,可以被独立调度并占用处理,不同的进程互不影响,可访问共享数据或者资源 进程控制块(process control block, PCB):进程的数据结构,操作系统管理控制进程运行所用的信息集合,操作系统为每一个进程都维护了一个PCB,用来存储保存和该进程有关的状态信息 进程是操作系统最小可调度的资源单位 多个程序运行在单核心CPU服务器上,实质就是在共享时间片(时间片,操作系统将某个程序分配到某段CPU时间上,单核是无法同时运行多个程序的,只能共享时间片,而进程就是因此而生) 进程状态有3种,分别是运行,阻塞以及就绪 运行和就绪可互相转换,运行状态就是CPU指令在读取运行进程中的程序段,而就绪就是该进程在等待调用 运行可切换到阻塞状态 阻塞就是进程在等待信号(依赖的资源没有就位),阻塞状态结束后会切换到就绪状态 进程状态的切换可理解为接力赛跑,运行状态就是正在跑的运动员,而就绪状态就是在等待接力棒的运动员,而阻塞状态就是运动员需要补充休息,暂时不跑了...

2021-10-07 · 1 min · Me