cpu 基本组成
- pc 程序计数器,记录当前指令的地址,指令存在于内存当中,内存相当于一个大型byte数组,pc记录当前指令存在于内存中的哪个位置
- registers 暂时存储cpu计算需要的数据
- ALU 逻辑运算单元. 一次计算2+3 的流程
- 内存中先存储着2和3
- mov 指令把2 和 3 通过总线放到 寄存器 的不同存储单元中
- ALU 读取 寄存器中的数据,进行计算,把结果写入另一个寄存器.
- 最后把结果的寄存器放入内存中
- CU 控制单元
- MMU 内存管理单元
- cache
线程的切换
当线程切换的时候,cpu需要把 程序计数器 和 寄存器 中的数据先存回内存,然后把下一个线程的内容读取进来, ALU才能进行计算,这是一个很消耗资源的事情.
缓存
在这里插入图片描述
操作系统
内核态 & 用户态
cpu分不同的指令级别.
linux 内核的指令级别是 ring 0 ,用户的指令是 ring 3.对于关键系统的访问,需要让内核来帮助调用,就是用户态和内核态的切换
进程 & 线程 & 携程 & 中断
- 进程和线程有什么区别
进程是程序原先在硬盘上,被读取到内存中,拥有独立的内存空间,和系统资源.
对于 linux操作系统来说,线程 就是一个普通的进程 只是和其他进程共享资源 - 协程
现在jvm起的线程对应着操作系统的一个线程,属于重量级线程,上下文切换需要耗费很多资源.协程属于用户态的线程,是虚拟的,切换不需要经过操作系统的调用
进程
linux 分配资源的基本单位,进程描述符 PCB. 操作系统提供clone 函数创建进程
僵尸进程
父进程创建子进程后,会维护子进程的一个pcb结构,子进程退出,由父进程释放,如果父进程没有释放,就会变成一个僵尸进程
孤儿线程
子进程结束之前,父进程已经退出,由1号进程维护
中断
中断分成硬中断和软中断,其实就是打断正在执行的程序去执行其他的东西
内存管理
现代操作系统为了解决多个进程的内存问题: 1 内存不够用. 2 相互打扰
虚拟地址, 分页装入, 软硬件结合寻址
- 解决内存撑爆
将硬盘上的程序分成 若干个4k大小的页 . 内存中也被拆分成 4k大小的容器. 在使用程序的时候,用到了哪一块区域,就把硬盘中对应的4k区域读取到内存中. 不会把全部的数据拷贝到内存中.
举个例子
用户点击了 qq.exe 程序, 内核知道qq程序已经被分成了6页,程序的入口是 第三页. 所以就只把第三页加载进内存. 在执行的过程中,发现第三页用到了第四页的内容,于是又把第四页从硬盘加载到内存中. 如果内存不够用了 LRU 算法淘汰一页,放入 swap 分区中 - 解决相互打扰问题
虚拟内存. 程序中用到的地址空间都是虚拟出来的,这样就永远不能主动访问真是物理内存而影响到其他进程. 虚拟空间大小是 64位机器 2^64 . 站在虚拟内存的角度,进程独占整个内存+cpu.
通过 os+ mmu 映射到真实物理内存.