01_ 计算机硬件
计算机由五大基本单元组成
· 控制器
· 运算器
· 储存期单元
· 输入单元
· 输出单元
02_ 操作系统
承上启下 1, 提供用户接口 2. 管理计算机资源
答: 操作系统启动流程:
BIOS / UEFI 是固化在主板上的一段程序。
BIOS:有一些限制 : 有BIOS自检导致启动速度变慢 、 默认和MBR磁盘分区进行配合 导致无法引导启动2.2TB容量以上的磁盘。
UEFI: BIOS的升级版 优化了自检的流程 使得启动速度有明显提升 、UEFI一般会配合GPT这个分区模式 使得它可以引导超过2.2TB容量以上的磁盘进行启动。
03_ Linux 发展简史
1969 Unix born in Bell 实验室
1984 Unix 商业化
1991 大学生Linus Torvalds 受Minix影响 实现初版Linux内核
1992 Linux内核以GPL协议 (开源) 发行 V1.0
内核版本 : 作者维护
发行版本:
查看Linux系统内核版本的方法:
方法1 & 2:
方法3:
云计算主要是Linux、安卓底层就是Linux、因为开源所以学术也很多
04_ Linux基本组成
Linux 体系结构
C Library 封装好的系统标准调用库
为什么要分为 1 用户空间 2 内核空间 呢?
内核模块 运行于 内核空间,而应用程序 运行于 用户空间。
从安全的角度上:
他们是相互隔离的,即使是应用程序崩溃了也不会对内核产生任何影响
从权限的角度出发:
内核程序运行于内核空间,拥有最高级别的权限, 拥有访问硬件设备的所有权限 以及对系统资源管理的权限。
应用程序较低权限,只能看到允许被使用的部分系统资源,不能直接访问内存和硬件设备。
那么应用程序是如何与硬件设备通信的呢?例如:发起一次IO请求
这就涉及到了应用程序的上下文的切换
应用程序默认运行于用户空间 我们称之为处于用户态。当用户发起一次IO请求,其实就是底层通过C library发起一次*系统调用(System Call) *。而发起一次系统调用之后,程序会从用户态切换到内核态。当调用任务完成后,程序又会切换回用户态。这就是一次简单的系统调用过程。
中间层:硬件软件的交互。
资源管理系统:进程管理,内存管理,虚拟文件系统,网络堆栈。
命令:应用程序通过这些命令完成系统调用(System Call)
Inside the Linux Kernel(漫画)
每一个企鹅都是一个进程(Process)。
底层是File System(文件系统)文件的操作
中间层是一个进程管理 进程运行 (进程管理、listener监听、进程之间的通信、进程访问文件系统)
上层是一个terminal (进程监听tty)
04_ Linux系统结构 -进程Process管理
· 进程是正在执行的一个程序或命令
· 进程有自己的地址空间,占用一定的系统资源
· 一个CPU和同一时间只能允许一个进程
· 进程由它的进程ID(PID)和它父进程的进程ID(PPID)唯一识别
Linux的进程结构是一个🌲树形结构。
PID0 是创世进程(PID为0的进程) 它会拉起 1 进程 和 2进程
PID1 是 所有用户进程的父进程
PID2 是 所有内核进程的父进程
Nginx的命令:
答:进程调度
进程调度是指操作系统OS按照某种策略或规则选择进程占用CPU进行运行的过程。
完整的进程生命周期:
R:可执行的等待状态,进程就绪。 S: 当Nginx 没有在处理用户的请求的时候,默认就处于一个可中断的睡眠状态。当有一个HTTP请求到来的时候,Nginx 被拉起来执行对应的请求,返回相应数据给用户。 D:例如:进程在等待某一次IO 的完成。 T: 往往由调试程序、Debug工具引起的 Z: 退出状态,进程成为僵尸进程 X: 退出状态,进程即将被销毁
进程调度原则:
轮询保证所有优先级的进程都有机会被执行到。不会有低优先级的进程被饿死。
用户态 / 内核态 是对每一个进程而言的 (每一个程序而言的 )
同一个CPU - 单位时间 - 只有一个进程Process在运行。
04_ Linux系统结构 - 文件系统
文件系统是操作系统中负责管理持久数据的子系统,负责把用户的文件存到磁盘硬件中,持久化的保存文件。
Linux中一切皆文件(index.js/html; Content; Device; socket)
虚拟文件系统(VFS)
· 对应用层提供一个标准的文件操作系统
· 对文件系统提供一个标准的文件接入接口
Nginx首先会去用户缓冲区寻找要读取的文件 如果没有命中 就会发起一次System Call ,也就是系统IO。 IO发起的时候,Nginx进程就会从用户态切换到内核态。进入内核态后,内核进程会从内核缓冲区中读取以前是否命中过对应的一些内容,如果有的话,也直接会从内核缓冲区讲这些数据通过CPU (Central Processing Unit)copy到 用户缓冲区, 给用户进程使用;如果没有命中 ,内核进程需要通过DMA(Direct Memory Access) ,直接存储访问,向磁盘IO,DMA Copy到内核缓存区,再CPU Copy到用户缓冲区。
驱动程序 (Driver): 驱动程序是计算机操作系统用来与特定硬件设备通信的软件。
04_ Linux系统结构 - 用户权限
用户账户:
超级用户 root
- 权限:
root用户拥有系统上几乎所有的权限。它可以读取、修改、删除任何文件,无论文件的权限设置为何。 - 任务能力:
root用户可以执行一些只有超级用户才能执行的任务,例如更改系统设置、管理用户帐户、安装和卸载软件等。 - 风险:由于
root拥有如此强大的权限,任何作为root用户执行的错误操作都可能导致系统崩溃或数据丢失。因此,经常建议管理员只在必要时使用root身份,并尽量避免在日常任务中使用它。
在某些 Linux 发行版中(例如 Ubuntu),默认情况下 root 用户是被禁用的。相反,这些系统采用了 sudo 机制,允许普通用户在需要执行超级用户任务时临时获得超级用户权限。
用户权限操作:
05_ 软件包管理
底层工具:从买原料 做起
上层工具:厨师 帮我们底层的依赖项都解决掉了
Debian
Ubuntu