Linux基础 | 青训营

46 阅读6分钟

1693285300160.png

1693285350393.png

1693285388652.png

01_ 计算机硬件

计算机由五大基本单元组成

· 控制器

· 运算器

· 储存期单元

· 输入单元

· 输出单元

02_ 操作系统

承上启下 1, 提供用户接口 2. 管理计算机资源

1693285505123.png

答: 操作系统启动流程:

1693289814187.png

1693289814187.png 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

内核版本 : 作者维护

1693289859835.png 发行版本:

1693289917831.png

查看Linux系统内核版本的方法:

方法1 & 2: 1693289937511.png 方法3:

1693290028648.png 云计算主要是Linux、安卓底层就是Linux、因为开源所以学术也很多

1693290087045.png

04_ Linux基本组成

1693290140750.png

Linux 体系结构

C Library 封装好的系统标准调用库

1693290185639.png 为什么要分为 1 用户空间 2 内核空间 呢?

内核模块 运行于 内核空间,而应用程序 运行于 用户空间。

从安全的角度上:

他们是相互隔离的,即使是应用程序崩溃了也不会对内核产生任何影响

从权限的角度出发:

内核程序运行于内核空间,拥有最高级别的权限, 拥有访问硬件设备的所有权限 以及对系统资源管理的权限。

应用程序较低权限,只能看到允许被使用的部分系统资源,不能直接访问内存和硬件设备。

那么应用程序是如何与硬件设备通信的呢?例如:发起一次IO请求

这就涉及到了应用程序的上下文的切换

应用程序默认运行于用户空间 我们称之为处于用户态。当用户发起一次IO请求,其实就是底层通过C library发起一次*系统调用(System Call) *。而发起一次系统调用之后,程序会从用户态切换到内核态。当调用任务完成后,程序又会切换回用户态。这就是一次简单的系统调用过程

1693290265938.png

中间层:硬件软件的交互。

资源管理系统:进程管理,内存管理,虚拟文件系统,网络堆栈。

命令:应用程序通过这些命令完成系统调用(System Call)

Inside the Linux Kernel(漫画)

1693290327213.png 每一个企鹅都是一个进程(Process)。

底层是File System(文件系统)文件的操作

中间层是一个进程管理 进程运行 (进程管理、listener监听、进程之间的通信、进程访问文件系统)

上层是一个terminal (进程监听tty)

04_ Linux系统结构 -进程Process管理

· 进程是正在执行的一个程序或命令

· 进程有自己的地址空间,占用一定的系统资源

· 一个CPU和同一时间只能允许一个进程

· 进程由它的进程ID(PID)和它父进程的进程ID(PPID)唯一识别

Linux的进程结构是一个🌲树形结构。

1693290407110.png

PID0 是创世进程(PID为0的进程) 它会拉起 1 进程 和 2进程

PID1 是 所有用户进程的父进程

PID2 是 所有内核进程的父进程

Nginx的命令: 1693290438220.png

1693290470386.png

答:进程调度

进程调度是指操作系统OS按照某种策略或规则选择进程占用CPU进行运行的过程。

完整的进程生命周期:

1693290525877.png

R:可执行的等待状态,进程就绪。 S: 当Nginx 没有在处理用户的请求的时候,默认就处于一个可中断的睡眠状态。当有一个HTTP请求到来的时候,Nginx 被拉起来执行对应的请求,返回相应数据给用户。 D:例如:进程在等待某一次IO 的完成。 T: 往往由调试程序、Debug工具引起的 Z: 退出状态,进程成为僵尸进程 X: 退出状态,进程即将被销毁

进程调度原则:

1693290670283.png

轮询保证所有优先级的进程都有机会被执行到。不会有低优先级的进程被饿死。

1693290704294.png

用户态 / 内核态 是对每一个进程而言的 (每一个程序而言的 )

同一个CPU - 单位时间 - 只有一个进程Process在运行。

04_ Linux系统结构 - 文件系统

文件系统是操作系统中负责管理持久数据的子系统,负责把用户的文件存到磁盘硬件中,持久化的保存文件。

Linux中一切皆文件(index.js/html; Content; Device; socket)

1693290925527.png 1693290960513.png 1693291030224.png

虚拟文件系统(VFS)

· 对应用层提供一个标准的文件操作系统

· 对文件系统提供一个标准的文件接入接口

1693291108847.png 1693291172494.png 1693291257038.png 1693291437675.png Nginx首先会去用户缓冲区寻找要读取的文件 如果没有命中 就会发起一次System Call ,也就是系统IO。 IO发起的时候,Nginx进程就会从用户态切换到内核态。进入内核态后,内核进程会从内核缓冲区中读取以前是否命中过对应的一些内容,如果有的话,也直接会从内核缓冲区讲这些数据通过CPU (Central Processing Unit)copy到 用户缓冲区, 给用户进程使用;如果没有命中 ,内核进程需要通过DMA(Direct Memory Access) ,直接存储访问,向磁盘IO,DMA Copy到内核缓存区,再CPU Copy到用户缓冲区。

驱动程序 (Driver): 驱动程序是计算机操作系统用来与特定硬件设备通信的软件。

04_ Linux系统结构 - 用户权限

用户账户:

1693291595853.png

超级用户 root

  1. 权限root 用户拥有系统上几乎所有的权限。它可以读取、修改、删除任何文件,无论文件的权限设置为何。
  2. 任务能力root 用户可以执行一些只有超级用户才能执行的任务,例如更改系统设置、管理用户帐户、安装和卸载软件等。
  3. 风险:由于 root 拥有如此强大的权限,任何作为 root 用户执行的错误操作都可能导致系统崩溃或数据丢失。因此,经常建议管理员只在必要时使用 root 身份,并尽量避免在日常任务中使用它。

在某些 Linux 发行版中(例如 Ubuntu),默认情况下 root 用户是被禁用的。相反,这些系统采用了 sudo 机制,允许普通用户在需要执行超级用户任务时临时获得超级用户权限。 1693291641720.png 1693291680615.png 1693291885722.png

用户权限操作: 1693291922305.png

05_ 软件包管理

1693292289317.png 底层工具:从买原料 做起 上层工具:厨师 帮我们底层的依赖项都解决掉了 1693291992003.png Debian Ubuntu 1693292361545.png 1693292425875.png