Linux基础 | 青训营笔记

99 阅读7分钟

本次课程要学习的主要内容:

计算机硬件

计算机操作系统

Linux系统概览

Linux系统结构

Linux系统软件包管理器

一.计算机的五大单元组成

控制器,运算器,存储器单元,输入单元,输出单元

其中控制器的作用是协调和指挥计算机中其他部件进行工作的地方,运算器作用作用是进行算数和逻辑运算。可以理解为控制器与运算器共同组成了CPU单元,存储器单元包括内存和外存(光驱,磁盘),输入单元(鼠标,键盘),输出单元(显示器,音响)。

二.操作系统(OS)

操作系统是用来管理和控制计算机系统中的硬件和软件资源,用于在用户和系统硬件之间传递信息,起到一个承上启下的作用。

操作系统的启动流程:

image.png

BIOS与UEFI的区别: UEFI是BIOS的一个升级版本,BIOS在开机时会对自检(硬件有一个检查,将会延长开机时间),UEFI直接优化了自检的流程。BIOS默认和MBR磁盘分区有一个配合,导致无法启动2.2T 容量的磁盘,UEFI一般会配合GPT这种模式的磁盘,它可以引导超过2.2T磁盘的启动。

三.Linux系统概览

Linux版本:内核版本与发行版本, 其中Linux +常用软件= Linux发行版本

查询Linux内核版本的shell命令:uname -a, cat /proc/version 查看Linux发行版本的shell命令:cat /etc/os-release

Linux系统的组成部分: shall, 内核,文件系统,应用程序。

image.png

Linux系统包括:

用户空间:包含用户运输的应用程序以及C Library

内核空间:系统调用层,内核代码以及平台架构相关的代码。

从安全的角度讲,他们是隔离的,也就是说即使应用程序崩溃了也不会队内核造成影响。

权限出发:内核程序应用于内核空间拥有较高级别的权限,可以访问所有硬件的权限以及对资源管理的权限,应用程序应用于用户空间用于较低级别的权限,只能看到允许他们使用的部分资源。不能直接访问内存和硬件设备。

应用程序如何与硬件程序通信?

应用程序默认运行于用户空间,我们称为用户态,当用户发起一次IO请求,即底层通过C Library发起的一次系统调用,刚发起系统调用时,程序会从用户态切换到内核态,即会有内核代表程序运行于内核空间。那么它就有了于内核通信的能力。当本次任务完成后又会从内核态切换回用户态。

四.Linux系统结构

1.进程管理

进程特点:

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

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

一个CPU 核同一时间只能运行一个进程;

进程由他的进程ID(PID) 和父进程ID(PPID)唯一识别。

Linux在启动时会拉起一个创始进程pid0,他是所有进程的上级,0进程启动后会拉起1进程和2进程,1进程为所有用户进程的父进程,2进程是所有内核进程的父进程。后续的默认情况下,linux启动一个用户进程都是以1进程为模板创建的。故Linux的结构为树形结构。

image.png

查看nginx进程: ps -ef | grep nginx

查看某个进程:top -p 93824(进程号)

关闭指定进程:kill 93824(PID)

全部进程动态展示:top

系统中运行的程序远远大于CPU的核数,那 Linux系统是如何实现同时运行这么多程序的?

通过进程调度啦~。

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

进程生命周期:

进程在创建完成后就会进入就绪状态,当CPU拉起调度进行执行时,我们称进处于运行状态,当本次进程结束,进程又会进入就绪状态,在进程运行时会碰到某些事件的执行,比如在IO执行过程中,进程就会进入一个等待状态,然后又会回到进程就绪状态,当本次IO完成以后,又会等待CPU将进程再次调度起来。在进程关闭时,首先进程会进入一个进程僵死的阶段,进程会向它的父进程发送一个进程关闭的消息。释放进程占有的一些计算机资源,然后等待父进程执行子进程关闭的命令,当父进程关闭子进程时,子进程才会真正处于一个关闭状态。

image.png

2.文件系统

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

虚拟文件系统:对应用层提供一个标准的文件操作接口,对文件系统提供一个标准发文件接入接口。

将文件夹中的文件类型举例出来:df -T,mount

查看文件夹中的内容:

创建文件夹:mkdir demo

移动demo文件夹到/home: mv demo /home

删除demo文件夹:rm -r demo

创建空文件:touch file.txt

复制文件:cp file.txt file_box.txt

文件读取流程(以nginx为例):

当nginx读取到一个用户请求时,nginx会去找请求对应的文件,将文件内容读取出来返回给用户。首先nginx进程会去用户缓存区去寻找之前是否有命中过相关的文件,如果有直接在用户缓存区读文件并进行返回,如果没有命中,会发起一次系统调用(系统IO),当系统IO发起时, nginx进程会从用户态切换到内核态,内核进程会到内核缓存 区中寻找之前是否命中过相关内容,如果有,会从内核缓冲区通过CPU将数据拷贝到用户缓冲区给用户使用,如果没有命中的话内核进程会通过DMA(直接存储访问)向磁盘发起文件读取请求,DMA会将相关文件和数据拷贝到内核缓冲区,内核缓冲区有数据时会向CPU发送指令,CPU 会将数据从内核缓存区拷贝到用户缓冲区,之后nginx进程就会读取到数据。然后进行写的流程:将用户缓冲区的数据通过CPU拷贝到Socket缓冲区,最终通过DMA将数据通过网卡返回给用户。

image.png

3.用户权限

查看用户信息:

查看当前用户信息:w

查看当前用户所属的组:groups

查看用户的uid信息:id xxx

用户权限操作:

在根目录创造一个文件夹,查看当前用户所拥有文件夹的权限:cd / && mkdir demo && ls -ld demo

创建一个用户并赋予可写权限:sudo useradd ceshi

设置用户密码:sudo passwd ceshi

切换ceshi用户登录:su ceshi

进入demo文件夹:cd demo

创建index.js文件成功:touch index.js

五.Linux系统软件包管理器

软件包:通常指的是一个应用程序,它可以是一个GUl应用程序、命令行工具或〈其他软件程序需要的)软件库。

软件包管理工具: 底层工具:主要用来处理安装和删除软件包文件等任务,DPKG,RPM 上层工具:主要用于数据的搜索任务和依赖解析任务,APT,YUM,DNF

image.png

自我总结:

在今天的课程中我学到了Linux操作系统中的内核空间以及用户空间的分布与作用,以及进程的生命周期和文件读取的基本流程。

image.png