WORK
2023.8.7 周一
1.出差前针对二次电源进行培训
2023.8.8 周二
1.出差
2.三江二次电源测试
2023.8.9 周三
1.测试二次电源
2.晚开会统一二次电源进度
2023.8.10 周四
1.测试二次电源
2023.8.11 周五
1.测试二次电源
《BOOK》
第四章 计算机的大管家:操作系统
4.1 一个控制系统的进化
初始:人手动切换程序;进化:机器控制程序,自动实现切换
4.1.1多道程序处理(类似于超线程)
4.1.2时间分片
死循环问题的解决:引入中断
控制程序及时获得控制权:引入时钟中断
时间片轮转:基础——时钟中断
4.1.3状态
给程序赋予状态:创建、就绪、执行、阻塞、中止等。
4.1.4优先级
给程序赋予优先级
4.1.5多核时代
核数增多,控制复杂,控制程序优化升级——操作系统。
4.2程序运行的实体:进程
4.2.1进程地址空间(虚拟地址)
4.2.2进程调度
把占有CPU的进程赶出CPU,靠的是中断,一旦有中断信号出现,操作系统就抢到执行的机会了。
4.2.3进程与线程
以前一个进程里只有一个执行流,为提高并发量,需创建多进程,但进程间通信等较为麻烦,因此,一个进程中多个执行流思路出现,线程就出现了。更重要的是,这些线程用的是一个地址空间,线程间通信要更方便。
现在,操作系统调度执行的单位由原来的进程变成了线程。
4.3CPU的执行流:线程
线程的本质就是一个个执行流,指定了CPU从进程空间的哪个位置开始执行指令。
4.4内核地址空间历险记:系统调用
4.4.1神秘的长者
程序的进程地址空间分为两部分,一部分是用户地址空间,是应用程序能访问的内存区域,另一部分是内核地址空间,是操作系统所在的内存区域。
4.4.2系统调用
操作系统把管理文件、内存、线程、硬件设备等资源的操作封装成函数,并提供函数接口,供应用程序使用,这些函数就是系统调用。系统调用函数都位于内核地址空间,为安全性考虑需要单独设计通道,连接用户态地址空间与内核态地址空间。
4.4.3内核堆栈
一个应用线程有两个栈,一个在用户态地址空间,一个在内核态地址空间。
4.5当除数为0时,CPU发生了什么
4.5.1中断和异常
中断描述符表——IDT,IDT把所有中断和异常发生后要去处理的地方记录成了一个表。
4.5.2信号投递
给进程发送相应信号
4.5.3异常返回
处理投递的信号,返回用户态
4.6发给进程的信号,到底去哪了
4.6.1可靠信号与不可靠信号
4.6.2信号的处理
进程从内核态返回用户态时,检查有没有信号需要处理。为安全保证,信号的自定义处理函数只能在用户态模式下运行。
4.6.3多线程的信号处理
信号的投递做区分:是投递给线程还是进程
4.7困住线程的锁,到底是什么
4.7.1原子操作
4.7.2自旋锁
适合快速处理的场合
4.7.3互斥锁
把自旋锁里阻塞自旋的等待方式调整为睡眠等待
4.7.4条件变量
4.7.5信号量
有几个就能占几个
4.8 linux的权限管理
4.8.1打开文件的过程
经过的准备工作多
4.8.2权限检查
UGO(user,group,other),linux为所有文件针对所属的用户、所属的用户组和其他用户分别设置了访问权限,读,写,可执行三种权限的组合,总共用9个比特位来表示。
4.8.3UGO与ACL检查
ACL(访问控制列表)
4.8.4Cgroup与SELinux的检查
4.9计算机中“楚门的世界”
Docker——轻量级的虚拟容器
虚拟机——占用空间大
4.9.1隐藏文件系统:chroot与pivot_root
限制容器中进程的活动区域——能访问的文件系统目录。
4.9.2进程的隔离:命名空间
命名空间中的进程无法看到空间之外的进程、用户、网络等信息。
4.9.3行为的限制:Cgroup
划定分组,限制每个分组能够使用的资源,如内存的上限值、CPU的使用率、硬盘空间总量等。