本次课程要学习的主要内容:
计算机硬件
计算机操作系统
Linux系统概览
Linux系统结构
Linux系统软件包管理器
一.计算机的五大单元组成
控制器,运算器,存储器单元,输入单元,输出单元
其中控制器的作用是协调和指挥计算机中其他部件进行工作的地方,运算器作用作用是进行算数和逻辑运算。可以理解为控制器与运算器共同组成了CPU单元,存储器单元包括内存和外存(光驱,磁盘),输入单元(鼠标,键盘),输出单元(显示器,音响)。
二.操作系统(OS)
操作系统是用来管理和控制计算机系统中的硬件和软件资源,用于在用户和系统硬件之间传递信息,起到一个承上启下的作用。
操作系统的启动流程:
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, 内核,文件系统,应用程序。
Linux系统包括:
用户空间:包含用户运输的应用程序以及C Library
内核空间:系统调用层,内核代码以及平台架构相关的代码。
从安全的角度讲,他们是隔离的,也就是说即使应用程序崩溃了也不会队内核造成影响。
权限出发:内核程序应用于内核空间拥有较高级别的权限,可以访问所有硬件的权限以及对资源管理的权限,应用程序应用于用户空间用于较低级别的权限,只能看到允许他们使用的部分资源。不能直接访问内存和硬件设备。
应用程序如何与硬件程序通信?
应用程序默认运行于用户空间,我们称为用户态,当用户发起一次IO请求,即底层通过C Library发起的一次系统调用,刚发起系统调用时,程序会从用户态切换到内核态,即会有内核代表程序运行于内核空间。那么它就有了于内核通信的能力。当本次任务完成后又会从内核态切换回用户态。
四.Linux系统结构
1.进程管理
进程特点:
进程是正在执行的一个程序或命令;
进程有自己的地址空间,占用一定的系统资源;
一个CPU 核同一时间只能运行一个进程;
进程由他的进程ID(PID) 和父进程ID(PPID)唯一识别。
Linux在启动时会拉起一个创始进程pid0,他是所有进程的上级,0进程启动后会拉起1进程和2进程,1进程为所有用户进程的父进程,2进程是所有内核进程的父进程。后续的默认情况下,linux启动一个用户进程都是以1进程为模板创建的。故Linux的结构为树形结构。
查看nginx进程: ps -ef | grep nginx
查看某个进程:top -p 93824(进程号)
关闭指定进程:kill 93824(PID)
全部进程动态展示:top
系统中运行的程序远远大于CPU的核数,那 Linux系统是如何实现同时运行这么多程序的?
通过进程调度啦~。
进程调度: 进程调度是指操作系统按照某种策略或规则选择进程占用CPU进行运行的过程。
进程生命周期:
进程在创建完成后就会进入就绪状态,当CPU拉起调度进行执行时,我们称进处于运行状态,当本次进程结束,进程又会进入就绪状态,在进程运行时会碰到某些事件的执行,比如在IO执行过程中,进程就会进入一个等待状态,然后又会回到进程就绪状态,当本次IO完成以后,又会等待CPU将进程再次调度起来。在进程关闭时,首先进程会进入一个进程僵死的阶段,进程会向它的父进程发送一个进程关闭的消息。释放进程占有的一些计算机资源,然后等待父进程执行子进程关闭的命令,当父进程关闭子进程时,子进程才会真正处于一个关闭状态。
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将数据通过网卡返回给用户。
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
自我总结:
在今天的课程中我学到了Linux操作系统中的内核空间以及用户空间的分布与作用,以及进程的生命周期和文件读取的基本流程。