课程内容
- 计算机硬件
- 计算机操作系统
- Linux系统概览
- Linux系统结构
- Linux系统软件包管理器
计算机硬件
五大基本单元
- 控制器
- 运算器
- 存储器单元
- 输入单元
- 输出单元
输入单元(Input Unit):负责将外部信息(如键盘、鼠标、传感器等)转换成计算机可识别的信号,然后将其传输到主存储器中。
输出单元(Output Unit):负责将计算机处理结果转换成人类可读的信息(如显示器、打印机、音箱等),并输出到外部环境。
控制器(Control Unit):负责控制计算机系统中的各个组件协调工作,从主存储器中读取指令,解码并执行指令,控制计算机系统的整体运行。
运算器(Arithmetic Logic Unit,简称ALU):负责执行计算机系统中的算术运算和逻辑运算,包括加、减、乘、除、与、或、非等运算。
存储器单元(Main Memory):负责存储计算机系统中的数据和指令,是计算机系统中最重要的组成部分之一。
计算机操作系统
操作系统是计算机系统中的一种重要软件,是计算机硬件和应用程序之间的桥梁,负责管理计算机系统的各种资源,包括处理器、内存、硬盘、输入输出设备、网络等,并为应用程序提供统一的、友好的接口,使得应用程序可以方便地访问这些资源。
操作系统的主要功能包括:
处理器管理:操作系统通过进程管理和调度算法,控制各个应用程序的执行顺序和资源占用情况,使得处理器能够高效地协同工作,避免出现资源竞争和浪费现象。
存储器管理:操作系统负责管理计算机系统中的内存资源,包括内存的分配、回收、保护、虚拟化等,使得各个应用程序可以独立、稳定地使用内存资源,避免出现内存泄漏和内存溢出等问题。
设备管理:操作系统负责管理计算机系统中的输入输出设备,如键盘、鼠标、打印机、网络等,包括设备驱动程序的管理、设备的分配和释放、设备的控制和调度等,使得各个应用程序可以方便地使用各种输入输出设备。
文件管理:操作系统负责管理计算机系统中的文件和目录,包括文件的创建、读写、复制、删除等操作,以及文件系统的维护和保护等,使得各个应用程序可以方便地存取和管理文件。
安全性管理:保障计算机系统的安全性和稳定性,防止病毒、黑客等安全攻击。
常见的操作系统包括Windows、Linux、macOS等,它们各自具有不同的特点和应用场景。操作系统的发展推动了计算机技术的进步和应用领域的不断拓展,成为现代计算机系统中不可或缺的重要组成部分。
操作系统启动流程
BIOS和UEFI都是计算机启动时的固件,负责启动操作系统并提供计算机硬件的基本输入输出功能。
BIOS是传统的启动方式,采用16位的实模式,有一定的限制,例如最大只能支持2.1TB的硬盘容量等。BIOS在计算机启动时首先进行硬件自检,检测硬件是否正常,然后从设定的启动设备(例如硬盘、光盘)中搜索启动记录,加载操作系统内核。
UEFI是一种新型的启动方式,采用32位或64位的保护模式,相对于BIOS具有更加先进的功能和更好的安全性。UEFI支持GPT分区和GUID磁盘标识符,可以支持超过2.1TB的硬盘容量。同时UEFI支持网络启动,可以通过网络下载和启动操作系统,便于系统维护和管理。
总体来说,UEFI是一种比较先进的启动方式,具有更好的功能和安全性。但是由于历史原因,BIOS在很多计算机上仍然被广泛使用,因此在实际应用中仍然需要考虑两者的兼容性和适用性。
Linux系统概览
Linux版本
- 内核版本
- 发行版本
Linux内核 + 常用软件 = 发行版本
查看linux系统内核版本
- 方法一:
uname -a:显示系统的所有信息 - 方法二:
cat /prov/version:显示正在运行的内核版本。 - 方法三:
cat /etc/os-release:显示发行版本。
Linux系统应用领域
- IT服务器(操作系统、虚拟化和云计算)
- 嵌入式和智能设备
- 个人办公桌面
- 学术研究与软件研发
Linux系统结构
基本组成
-
内核:主要分为五部分:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。进程调度 (SCHED) 控制进程对CPU的访问。linux内核的作用概括来说就是它负责管理计算机的硬件和软件资源。
-
shell:命令解释器,通过shell达到与内核的交互,从而达到管理和使用linux的一些资源。
-
文件系统: 将用户文件存入磁盘中。Linux文件系统的设计目的是用来存储文件和管理文件。理念是:一切都是文件。
-
应用:运行在用户空间的应用程序,它们通过系统调用与内核交互,完成各种任务。
Linux体系结构
linux体系结构主要分为用户空间和内存空间,内核的作用可以概括为:
-
内核是硬件和软件之间的中间层,理解为它负责管理计算机的硬件和软件资源,为应用程序提供服务。
-
内核是一个资源管理程序,它负责管理计算机的内存、CPU、输入输出设备等资源,以确保系统的稳定 运行。
-
内核提供一组面向系统的命令,这些命令可以用来管理系统资源、执行任务和进行系统维护等操作。这些命令通常由系统管理员使用,用来对系统进行管理和维护。
进程管理
进程特点
-
进程是正在执行的程序和命令。
-
进程有自己的地址空间,占有一定的资源。
-
一个cpu核同一时间只能运行一个进程。
-
进程由它的进程ID(PID)和父进程ID(PPID)唯一识别。
进程和线程的区别?(地址空间、开销、并发性、内存)—火车与车厢的关系
- 进程是资源分配的最小单位;线程是cpu调度的最小单位
- 一个进程包含多个线程;多个线程共享进程的堆和方法区(元空间),但每个线程都有自己的程序计数器(流程控制、记录执行位置)、堆栈(保护局部变量独自访问)和局部变量
- 进程有自己独立地址空间;线程没有自己独立的地址空间
- 进程切换开销大,耗费资源大;线程开销小
- 进程的并发性低;线程的并发性高
- 进程可以独立执行;线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制
- 系统运行时会为进程分配内存空间;线程 CPU 外,系统不会为线程分配内存,共享进程的资源
- 一个进程崩溃后,其它进程不受影响(火车着火,其他火车不着火);一个线程崩溃,整个进程都死掉(火车着火,车厢全部会着火)
进程命令
1、查看启动的nginx进程:ps -ef | grep nginx
2、查看某个进程:top -p 90384 (进程号)
3、关闭进程:kill 90384 (进程号)
4、全部进程实时动态图: top
进程调度
系统中运行的程序远远大于CPU的核数,那Liux系统是如何实现同时运行这么多程序的?
-
创建阶段:进程在创建时,会分配资源并初始化进程控制块(Process Control Block,PCB),包括进程标识、程序计数器、CPU寄存器、内存分配情况等。
-
就绪阶段:进程在获得了运行所需的资源后,会被放置在就绪队列中等待CPU的分配。此时进程已经准备好运行了,只是还没有得到CPU的资源。
-
运行阶段:当进程被调度到CPU上运行时,进程的代码被加载到CPU中执行,这时进程进入运行状态。
-
阻塞阶段:在运行过程中,如果进程需要等待某些事件(如等待I/O操作完成),就会进入阻塞状态,此时进程会释放CPU资源,直到等待的事件完成。
-
结束阶段:当进程完成了它的任务或发生错误时,就会进入终止(僵死)状态。此时系统会回收该进程所占用的资源,并从进程表中删除该进程,也说明了这个进程结束了
进程调度原则
-
一个CPU核同一时间只能运行一个进程
- 在多道程序设计中,CPU资源是必须被多个进程共享的。因为CPU核心数量是有限的,所以操作系统必须在多个进程之间进行调度,以便将CPU时间均匀地分配给它们。
-
每个进程有近乎相等的执行时间
- 当进程开始执行时,操作系统会根据进程的优先级和时间片大小进行调度。在进程执行的过程中,操作系统会监测进程的执行时间,并在进程的时间片用尽之前将其挂起,以便为其他进程腾出CPU时间
-
对于逻辑CPU而言进程调度使用轮询的方式执行,当轮询完成则回到第一个进程反复
- 操作系统通过轮询算法来进行进程调度。在轮询算法中,每个进程都被分配一个时间片,在时间片用尽之前,进程将一直运行。如果时间片用尽,则操作系统会将该进程挂起,并将CPU时间分配给下一个进程
-
进程执行消耗时间和进程量成正比
- 进程的执行时间与进程数量成正比。当系统中有更多的进程需要执行时,操作系统需要更多的时间来进行进程调度。这就导致了更多的上下文切换和调度时间,进而降低了系统的性能
进程的系统调用
Linux文件系统
Linux文件系统是指在Linux操作系统中管理文件和目录的一套机制和结构,主要由以下几个组件组成:
文件:在Linux中,一切皆文件,包括普通文件、目录、设备文件等等。 目录:Linux文件系统采用层次目录结构,所有的文件都存储在根目录“/”下或其子目录中,可以通过“/”分隔符来表示路径。
文件系统:文件系统是将数据组织起来存储在硬盘或其他存储设备上的一种机制。Linux支持多种文件系统,包括常见的ext4、FAT32、NTFS等。
文件描述符:文件描述符是在Linux中对文件进行读写操作的一种机制。每个打开的文件都会被分配一个唯一的文件描述符,用于标识该文件。
权限管理:Linux文件系统采用权限管理机制,对于每个文件和目录,都有一组权限属性,包括文件所有者、文件所属组、读写执行权限等等,可以通过chmod、chown等命令进行设置和修改。
虚拟文件系统:虚拟文件系统是Linux的一种特殊文件系统,它不是实际的物理文件系统,而是在内存中维护的一种数据结构,用于将各种物理文件系统(如ext4、FAT32等)统一管理。常见的虚拟文件系统包括/proc、/sys等。
Linux文件系统是采用树状的目录结构(最上层是 /(根)目录)
-
/bin: 存放二进制文件,包括常用的命令和工具,如ls、cp、mv、rm等。
-
/boot: 存放启动Linux操作系统所需的文件,如内核文件和启动加载程序。
-
/dev: 存放设备文件,包括硬件设备和虚拟设备,如磁盘、终端、打印机等。
-
/opt: 存放第三方应用程序的安装目录,如Oracle数据库等。
-
/root: 超级用户(root)的家目录,通常不用于普通用户。
-
/sbin: 存放系统命令,通常只有管理员有权限执行,如mount、umount等。
-
/home: 存放用户家目录,每个用户都有一个对应的家目录,可以在其中存放个人文件、配置等。
-
/usr: 存放系统资源,包括二进制文件、库文件、帮助文件等。
-
/var: 存放可变文件,包括系统日志、邮件、缓存等。
Linux有这么多不同的文件系统,如何实现对用户提供统一调用接口的?
- 虚拟文件系统(VFS)
- 对应用层提供一个标准的文件操作接口
- 对文件系统提供一个文件接入接口
查看文件系统类型
df -T: df命令报告文件系统磁盘空间利用率mount:mount 命令是挂载文件系统用的,不带任何参数运行,会打印包含文件系统类型在内的磁盘分区的信息
文件基本操作命令
ls:查看文件和目录列表。cd:切换当前工作目录。pwd:显示当前工作目录的路径。mkdir:创建目录。rmdir:删除目录。cp:复制文件或目录。mv:移动或重命名文件或目录。rm:删除文件或目录。touch:创建空文件或更新文件的时间戳。cat:查看文件内容。more/less:逐页查看文件内容。head/tail:查看文件头或尾的内容。chmod:修改文件或目录的权限。chown:修改文件或目录的所有者和所属组。ln:创建硬链接或符号链接。find:查找文件或目录。grep:在文件中查找匹配的文本。tar:打包和解压文件和目录。zip/unzip:压缩和解压文件和目录。
文件读取流程
-
应用程序通过系统调用(如
read)发起文件读取请求。 -
内核接收请求并检查文件描述符是否有效,以及用户是否有权限访问该文件。
-
内核检查文件数据是否已经缓存在页缓存(page cache)中。如果是,则直接从页缓存中读取数据;否则,内核将文件数据从磁盘读取到页缓存中。这一步可以通过DMA技术来加速。
-
内核将文件数据从页缓存复制到应用程序的用户空间缓冲区。
-
应用程序可以访问用户空间缓冲区中的文件数据。
Linux用户权限
-
用户账号
- 普通用户账户:在系统中进行普通作业
- 超级用户账户:在系统中对普通用户和整个系统进行管理
-
组账户
- 标准组:可以容纳多个用户
- 私有组:只有用户自己
-
操作命令
w:查看当前登录用户信息groups:查看当前用户所属的组id xxxx:查看用户uid的信息
Linux文件权限
- 文件权限关于用户有三个概念:
- 所有者:文件的所有者
- 所在组:文件的所有者所在的组
- 其他人:除文件所有者及所在组外的其他人
- 每个用户对于文件都有不同权限,包括读(R)、写(W)、执行(X)
- 操作命令
Linux软件包管理
-
软件包
- 通常指的是一个应用程序,它可以是一个GUI应用程序、命令行工具或(其他软件程序需要的)软件库
-
软件包管理
- 底层工具:主要用来处理安装和删除软件包文件等任务,DPKG, RPM
- 上层工具:主要用于数据的搜索任务和依赖解析任务,APT, YUM, DNF
-
上层工具 相当于把底层工具要做的事情做好了。
Debian APT常用命令
- 列出所有可更新的软件清单命令:
apt update - 安装指定的软件命令:
apt install<package_name> - 安装多个软件包:
apt install<package_1><package_2><package_3> - 更新指定的软件命令:
apt update<package_name> - 删除软件包命令:
apt remove<package_name> - 查找软件包命令:
apt search<keyword> - 列出所有已安装的包:
apt list-installed
Debian 配置软件源
- 通常Debian系的Linux软件源配置文件:
/etc/apt/sources.list - 镜像地址:mirrors.aliyun.com/
/dists:查看系统代号/pool:查看软件分支