一、计算机硬件
由五大基本单元
- 控制器:是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。
- 运算器:运算器的功能是对数据进行各种算术运算和逻辑运算,即对数据进行加工处理。
- 存储器单元:存储器的功能是存储程序、数据和各种信号、命令等信息,并在需要时提供这些信息
- 输入单元:输入设备的作用是将程序、原始数据、文字、字符、控制命令或现场采集的数据等信息输入到计算机。常见的输入设备有键盘、鼠标器、光电输入机、磁带机、磁盘机、光盘机等
- 输出单元:它把计算机的中间结果或最后结果、机内的各种数据符号及文字或各种控制信号等信息输出出来。微机常用的输出设备有显示终端CRT、打印机、激光印字机、绘图仪及磁带、光盘机等。
其中输入设备与输出设备合称为外部设备,简称外设。
cpu=控制器+运算器
主板=I/O总线,输入输出系统
存储器=内存+硬盘
二、计算机操作系统
操作系统(OS)
管理和控制计算机系统中的硬件和软件资源,用于在用户与系统硬件之间传递消息。
目前比较主流的操作系统包括:
Windows操作系统:由微软公司开发的操作系统,广泛应用于个人电脑和服务器领域。
MacOS操作系统:由苹果公司开发的操作系统,运行在Macintosh系列的电脑上。
Linux操作系统:一种自由和开放源代码的操作系统,广泛应用于服务器领域和嵌入式设备等领域。
Android操作系统:由谷歌公司开发的移动操作系统,运行在大部分智能手机和平板电脑上。
iOS操作系统:由苹果公司开发的移动操作系统,运行在iPhone、iPad等移动设备上。
Chrome OS操作系统:由谷歌公司开发的面向云计算的操作系统,广泛应用于Chromebook等笔记本电脑上。
操作系统的两大功能(如图所示):
操作系统启动流程
BIOS是一组固化到计算机内主板上一个 ROM 芯片上的程序,主要作用是让计算机在开机的时候能够执行和解析这段程序,这段程序启动以后它会进行一系列初始化的动作,然后找到Bootloader(操作系统引导程序),运行它,然后运行启动OS。
BIOS
BIOS的功能主要包括中断服务程序、系统设置程序、开机自检程序和系统启动自举程序4项。
中断服务程序: 实质上是指电脑系统中软件与硬件之间的一个接口,操作系统中对硬盘、光驱、键盘和显示器等外围设备的管理,都建立在BIOS的基础上。
系统设置程序: 电脑在对硬件进行操作前必须先知道硬件的配置信息,这些配置信息存放在一块可读写的RAM芯片中,而BIOS中的系统设置程序主要用来设置RAM中的各项硬件参数,这个设置参数的过程就称为BIOS设置。
开机自检程序: 在按下电脑电源开关后,POST(Power On Self Test,自检)程序将检查各个硬件设备是否工作正常,自检包括对CPU、640kB基本内存、1MB以上的扩展内存、ROM、主板、CMOS存储器、串并口、显示卡、软/硬盘子系统及键盘的测试,一旦在自检过程中发现问题,系统将给出提示信息或警告。
系统启动自举程序: 在完成POST自检后,BIOS将先按照RAM中保存的启动顺序来搜寻软硬盘、光盘驱动器和网络服务器等有效的启动驱动器,然后读入操作系统引导记录,再将系统控制权交给引导记录,最后由引导记录完成系统的启动。
UEFI
UEFI全称“统一的可扩展固件接口”,相比传统BIOS来说,它更易实现,容错和纠错特性也更强,从而缩短了系统研发的时间。简单点说,它是一种更高级的BIOS。
UEFI的优点
1、UEFI基于32或64位模式,突破了传统BIOS16位代码寻址能力。达到了处理器的最大寻址,克服了BIOS代码运行缓慢的毛病。
即设置UEFI启动,系统启动时间会缩短。
2、UEFI采用的是图形化界面,可以使用鼠标进行设置。用户进入BIOS使用起来更直观,操作上更为简便。而且还能支持中文
3、最重要的是,我们可以在UEFI下使用2.2T以上的硬盘做启动盘。如果你买了一个3T的硬盘,在传统BIOS下是无法用这个硬盘里的系统启动的。
三、 Linux系统概览
Linux发展简史
Linux版本
内核版本:进程调度、内存管理、配置管理虚拟文件系统、提供网络接口以及支持进程间通信。
发行版本:包含为用户提供各种服务的外围程序。
内核+常用软件=发行版本
Linux的发行版本系列
查看Linux系统内核版本
查看Linux系统版本(发行版本)
Linux系统应用领域
四、Linux系统结构
Linux基本组成
Linux系统一般有4个主要部分:
- 内核:是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序
- shell:是系统的用户界面,提供了用户与内核进行交互操作的一种接口。
- 文件系统:是文件存放在磁盘等存储设备上的组织方法。主要体现在对文件和目录的组织上。
- 应用程序:app
它们之间的关系
Linux体系结构
最上面是用户空间。这是用户应用程序执行的地方。用户空间之下是内核空间,Linux 内核正是位于这里。GNU C Library (glibc)也在这里。它提供了连接内核的系统调用接口,还提供了在用户空间应用程序和内核之间进行转换的机制。内核和用户空间的应用程序使用的是不同的保护地址空间。每个用户空间的进程都使用自己的虚拟地址空间,而内核则占用单独的地址空间。
Linux 内核可以进一步划分成 3 层。最上面是系统调用接口,它实现了一些基本的功能,例如 read 和 write。系统调用接口之下是内核代码,可以更精确地定义为独立于体系结构的内核代码。这些代码是 Linux 所支持的所有处理器体系结构所通用的。在这些代码之下是依赖于体系结构的代码,构成了通常称为 BSP(Board Support Package)的部分。这些代码用作给定体系结构的处理器和特定于平台的代码。
内核漫画
底层为文件系统,进行文件操作、管理。中间层是进程,是进程管理、进程运行的地方。上层tty,命令行工具,命令行输入项,用于交互使用的。
-
底层421的小企鹅,它表示着进程ID为 421 的进程,它正在查看文件柜中的文件,这代表系统中正有一个进程在访问文件系统。小狗,它是看门狗,这代表对文件系统的监控。
-
中间层桌子上坐的小企鹅都在等待状态wait中,等待工作任务。
-
写着80的门,是 HTTP (网站)的端口。
-
写着21的门比较老旧,代表这个 21 端口的 FTP 协议有点老旧了,目前用的人也比以前少了。
-
写着22的门,是 SSH 端口,是一个非常重要的远程连接端口,通常通过这个端口进行远程管理。
-
有两个扛着管道的企鹅,这代表着进程之间允许管道通信。
-
tty(终端)是对外沟通的渠道之一。
Linux系统结构——进程管理
进程管理
进程是正在执行的一个程序或命令
动态性:进程是程序的一次执行,它有着创建、活动、暂停、终止等过程,具有一定的生命周期,是动态地产生、变化和消亡的。动态性是进程最基本的特征。
进程有自己的地址空间,占用一定的系统资源
独立性:指进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单元。凡未建立PCB的程序都不能作为一个独立的单元参与运行。
一个CPU核同一时间只能运行一个程序
一个cpu核心有一套寄存器,可以执行一个任务(一般是线程),所以一个核心同一时刻只能运行一个线程。(不论这个线程是哪个进程的,cpu眼里没有进程的概念)。每隔一定时间会切换线程。
进程由它的进程ID(PID)和它的父进程的进程ID(PPID)唯一识别
PID是程序被操作系统加载到内存成为进程后动态分配的资源。每次程序执行的时候,操作系统都会重新加载,PID在每次加载的时候都是不同的。
不论什么进程(除init进程)都是由还有一个进程创建。该进程称为被创建进程的父进程。
进程结构:树形结构
查看进程信息
问题思考
系统中运行的程序远远大于CPU的核数,那 Linux系统是如何实现同时运行这么多程序的?
进程调度
进程调度是指操作系统按某种策略或规则选择进程占用CPU进行运行的过程。
上图中进程的几种状态:
-
运行态:进程正在处理机上运行。在单机处理机环境下,每个时刻最多只有一个进程处于运行态。
-
就绪态:进程获得了除处理机外的一切所需资源,一旦得到处理机,便可立即运行。系统中处于就绪状态的进程可能有多个,通常将他们排成一个队列,称为就绪队列。
-
阻塞态:又称等待态。进程正在等待某一事件而暂定运行,如等待某资源为可用或等待输入/输出完成。即使处理机空闲,该进程也不能运行。
-
创建态:进程正在被创建,尚未转到就绪态。创建进程通常需要多个步骤:首先申请一个空白的PCB,并向PCB中填写一些控制和管理进程的信息,然后由系统为该进程分配运行时所必须的资源,最后把该进程转入就绪态。
-
结束态:进程正从系统中消失,可能是进程正常结束或其他原因中断退出运行。进程需要结束运行时,系统首先必须置该进程为结束态,然后再进一步处理资源释放和回收等工作。
进程调度原则
进程的调度可能会发生以下问题:
- 一个进程从用户态进入内核后,别的进程只有等到它退出内核态才能有机会得到执行,这样就会存在时延问题;
- 可能存在优先级反转的问题,例如一个低优先级的用户进程由于执行中断等原因使一个高优先级的任务得不到及时的响应。
这时候进程的调度将遵守以下原则:
(1)时间片原则:各进程按系统分配给的一个时间片运行,当该时间片用完或由于该进程等待某事件发生而被阻塞时,系统就停止该进程的执行而重新进行调度。
(2)优先级原则:每个进程均赋于一个调度优先级,通常一些重要和紧急的进程赋于较高的优先级。当一个新的紧迫进程到达时,或者一个优先级高的进程从阻塞状态变成就绪状态的时,如果该进程的优先级比当前进程的优先级高,OS就停止当前进程的执行,将处理机分配给该优先级高的进程,使之执行。这个原则的本质是:系统中当前运行的进程永远是可运行进程中优先权最高的那个。
(3)短进程优先原则:当新到达的作业对应的进程比正在执行的作业对应进程的运行时间明显短时,系统剥夺当前进程的执行,而将处理机分配给新的短进程,使之优先执行。
进程的系统调用
操作系统提供进程与操作系统进行交互的一组接口,这组接口被称为系统调用。
调用的过程:
- 运行于用户态的应用程序发出系统调用请求,保护现场。
- 一般都是给出一个中断指令(软中断),然后根据中断向量表查找系统调用表。
- 在核心态执行系统调用处理程序(中断程序)。
- 最后返回应用程序,恢复现场。
Linux系统结构——文件系统
文件系统
文件系统负责管理持久化数据的子系统,负责把用户的文件存到磁盘硬件中。
Linux中一切皆文件,保证在Linux里所有对文件的操作都是统一的。
文件系统采用树状的目录结构
虚拟文件系统(VFS)
- 对应用层提供一个标准的文件操作接口
- 对文件系统提供一个标准的文件接入接口
Linux支持了很多种类的文件系统,包含本地文件系统ext3、ext4到网络文件系统NFS、HDFS等,VFS系统屏蔽了不同文件系统的操作差异和实现细节,提供了统一的实现框架,也提供了标准的操作接口,这大大降低了操作文件和接入新文件系统的难度。
查看文件系统类型
文件基本操作
文件读取流程
读流程
1、应用程序发起读请求,触发系统调用read()函数,用户态切换为内核态;
2、文件系统通过目录项→inode→address_space→页缓存树,查询Page Cache是否存在;
3、Page Cache不存在产生缺页中断,CPU向DMA发出控制指令;
4、DMA 控制器将数据从主存或硬盘拷贝到内核空间(kernel space)的缓冲区(read buffer);
5、DMA 磁盘控制器向 CPU 发出数据读完的信号,由 CPU 负责将数据从内核缓冲区拷贝到用户缓冲区;
6、用户进程由内核态切换回用户态,获得文件数据;
写流程
1、应用程序发起写请求,触发系统调用write()函数,用户态切换为内核态;
2、文件系统通过目录项→inode→address_space→页缓存树,查询Page Cache是否存在,如果不存在则需要创建;
3、Page Cache存在后,CPU将数据从用户缓冲区拷贝到内核缓冲区,Page Cache变为脏页(Dirty Page),写流程返回;
4、用户主动触发刷盘或者达到特定条件内核触发刷盘,唤醒pdflush线程将内核缓冲区的数据刷入磁盘;
Linux系统结构——用户权限
用户账户
文件权限
查看用户信息
用户权限操作
五、Linux软件包管理
软件包
软件包管理工具
Debian APT常用命令
参考资料:
【1】主流的操作系统有哪些? - 知乎 (zhihu.com)
【2】安装系统避免不了,史上最全的BIOS解读与设置(上) - 知乎 (zhihu.com)
【3】取代传统BIOS的EFI和UEFI究竟是什么?要如何设置? - 知乎 (zhihu.com)
【4】一文看懂Linux内核!Linux内核架构和工作原理详解 - 知乎 (zhihu.com)
【5】一个多核cpu机器上,一个进程内的所有线程都在一个核心上跑吗,还是可以同时在多核上运行。? - 知乎 (zhihu.com)