鸟叔的私房菜
第0章
计基
https://wizardforcel.gitbooks.io/vbird-linux-basic-4e/content/4.html

原先cpu是有北桥和南桥
北桥主要用于cpu和一些需要链接速度快的设备,比如内存和显示接口
南桥用于连接速度相对较慢的,比如硬盘usb和网卡。
现在的芯片将北桥集成进了cpu,节约了水处理时间,同时也不会消耗更多的带宽
cpu外频:外部设备到通过前端总线(fsb),进行频率同步,
内频:fsb到cpu,cpu的频率快于fsb
倍频
cpu频率速度=外频x倍频
倍频是cpu出场已经设置好的不可更改,所以超频的一般是外频
磁盘的最小物理储存单位称之为扇区 (sector)
同一个同心圆的扇区组合成的圆就是所谓的磁道(track)
所有盘片上面的同一个磁道可以组合成所谓的柱面 (cylinder)
CMOS
主要的功能为记录主板上面的重要参数, 包括系统时间、CPU电压与频率、各项设备的I/O位址与IRQ等
BIOS
为写入到主板上某一块 flash 或 EEPROM 的程序,他可以在开机的时候执行,以载入CMOS当中的参数, 并尝试调用储存设备中的开机程序,进一步进入操作系统当中
网线选择

编码系统
latex
常用数学符号的 LaTeX 表示方法_latex 指数函数-CSDN博客
中文编码系统
最开始使用big5这种编码表,每个中文字会占用2byte,可以有 种汉字,
6w个汉字,,实际上big5定义了1w多个汉字,但是很多中文利用big5无法显示,所以才会有造字程序
之后国际组织iso/iec制定了unicode编码系统,俗称的utf8(万国码)就是这个。
程序运行
编译器,让让高阶程序转变成机器码
操作系统让我们不用重复撰写控制码
1.操作系统
1.1操作系统核心(kernel
操作系统也是一组程序
不过这组程序的重点是管理电脑的所有活动和驱动系统中的所有硬件
那么操作系统的功能就是让CPU可以开始判断逻辑与运算数值、 让内存可以开始载入/读出数据与程序码、让硬盘可以开始被存取、让网卡可以开始传输数据、 让所有周边可以开始运行等等
存取硬盘、网络功能、CPU资源取得等
上述功能即使操作系统的内核
操作系统的核心主要是管理硬件和提供相关的能力,如果使用者不小心将核心程序破坏,将会导致整个系统的崩溃,因此核心程序放置到内存当中是收到保护的,而且开机之后就一直贮存在内存当中
1.2 系统调度(system call
核心只会进行电脑系统的资源分配,
操作系统除了核心程序之外,还会提供一组开发接口,也就是系统调度层
软件与核心关系比较大。从软件到核心这步就是系统调度
硬件与核心关系比较大,应用程序
使用者到软件关系比较。内核
- 核心至少需要有以下功能
系统调用接口,这是为了方便陈旭开发着轻易与核心进行交流,进一步利用硬件资源
程序管理,也就是所谓的多任务环境,多个程序同时等待cpu运算处理,核心需要能够控制这些工作,让cpu资源有效的分配(决定哪个程序优先执行
内存管理,控制整个操作系统的内存管理,系统的所有程序码还有数据都必须先放到虚拟内存当中,内存不足时可以提供内存交换功能。
文件系统管理,也就是对于文件格式的识别与文件修改
例如:
windows98的核心认识ntfs文件格式的硬盘,所以就无法使用这个格式的文件。
设备驱动:硬件管理是核心的主要工作之一,由于有”可载入模块”所以可以将驱动程序编辑成模块。不需要重新编译核心
1.3操作系统和驱动程序
硬件设备不断更新,较新的谁被我们的操作系统不识别。
就比如之前遇到ubuntu无法上网,因为网卡太新,ubuntu20.04无法自己安装驱动,需要我们手动编译安装
操作系统应该如何驱动这些设备呢?
为了克服这些困难,操作系统通常会预留一些接口给开发商,用于他们利用接口开发硬件的驱动程序。

- 操作系统必须要能够驱动硬件,如此应用程序才能够使用该硬件功能;
- 一般来说,操作系统会提供开发接口,让开发商制作他们的驱动程序;
- 要使用新硬件功能,必须要安装厂商提供的驱动程序才行;
- 驱动程序是由厂商提供的,与操作系统开发者无关。
2 应用程序
驱动也属于一种应用程序,都是使用操作系统预留的开发接口进行开发。
重点回顾
- 计算机的定义为:“接受使用者输入指令与数据,经由中央处理器的数学与逻辑单元运算处理后,以产生或储存成有用的信息”;
- 电脑的五大单元包括:输入单元、输出单元、控制单元、算数逻辑单元、存储单元五大部分。其中CPU占有控制、算术逻辑单元,存储单元又包含内存与辅助内存;
- 数据会流进/流出内存是CPU所发布的控制命令,而CPU实际要处理的数据则完全来自于内存;
- CPU依设计理念主要分为:精简指令集(RISC)与复杂指令集(CISC)系统;
- 关于CPU的频率部分:外频指的是CPU与外部元件进行数据传输时的速度,倍频则是CPU内部用来加速工作性能的一个倍数, 两者相乘才是CPU的频率速度;
- 新的 CPU 设计中,已经将北桥的内存控制芯片整合到 CPU 内,而 CPU 与内存、显卡沟通的总线通常称为系统总线。 南桥就是所谓的输入输出(I/O)总线,主要在联系硬盘、USB、网卡等周边设备;
- CPU每次能够处理的数据量称为字组大小(word size),字组大小依据CPU的设计而有32位与64位。 我们现在所称的电脑是32或64位主要是依据这个 CPU解析的字组大小而来的!
- 个人电脑的内存主要元件为动态随机存取内存(Dynamic Random Access Memory, DRAM), 至于CPU内部的第二层高速缓存则使用静态随机存取内存(Static Random Access Memory, SRAM);
- BIOS(Basic Input Output System)是一套程序,这套程序是写死到主板上面的一个内存芯片中, 这个内存芯片在没有通电时也能够将数据记录下来,那就是只读存储器(Read Only Memory, ROM);
- 目前主流的外接卡接口大多为 PCIe 接口,且最新为 PCIe 3.0,单信道速度高达 1GBytes/s
- 常见的显卡连接到屏幕的接口有 HDMI/DVI/D-Sub/Display port 等等。HDMI 可同时传送影像与声音。
- 传统硬盘的组成为:圆形盘片、机械手臂、 磁头与主轴马达所组成的,其中盘片的组成为扇区、磁道与柱面;
- 磁盘连接到主板的接口大多为 SATA 或 SAS,目前台式机主流为 SATA 3.0,理论极速可达 600MBytes/s。
- 常见的文字编码为 ASCII,繁体中文编码主要有 Big5 及 UTF8 两种,目前主流为 UTF8
- 操作系统(Operating System, OS)其实也是一组程序, 这组程序的重点在于管理电脑的所有活动以及驱动系统中的所有硬件。
- 电脑主要以二进制作为单位,常用的磁盘容量单位为Bytes,其单位换算为1 Byte = 8bits。
- 最阳春的操作系统仅在驱动与管理硬件,而要使用硬件时,就得需要通过应用软件或者是壳程序(shell)的功能, 来调用操作系统操纵硬件工作。目前称为操作系统的,除了上述功能外,通常已经包含了日常工作所需要的应用软件在内了。
第1章 linux特性
Linux由于是Open Source的操作系统,所以他的程序码可以被修改成适合在各种机器上面运行的, 也就是说,Linux是具有“可移植性”,这可是很重要的一个功能喔!
1960年代初期麻省理工学院(MIT)发展了所谓的: “相容分时系统(Compatible Time-Sharing System, CTSS)”, 它可以让大型主机通过提供数个终端机(terminal)以连线进入主机,来利用主机的资源进行运算工作。
Dennis Ritchie 将B语言重新改写成C语言,再以C语言重新改写与编译Unics的核心, 最后正名与发行出Unix的正式版本!
操作系统是直接嵌入于产品当中的,理论上你不应该会更动到这个操作系统, 所以就称为嵌入式系统啦!
第2章 主机规划和磁盘分区
2.1linux与硬件的搭配
磁盘阵列(raid)
是利用硬件技术将数个硬盘整合成为一个大硬盘的方法,操作系统只会看到最后被整合起来的大硬盘。 由于磁盘阵列是由多个硬盘组成,所以可以达成速度性能、备份等任务。更多相关的磁盘阵列我们会在第十四章中介绍的。
磁盘格式分类
- mbr
- gpt
早期磁盘第一个扇区里面含有的重要信息我们称为MBR (Master Boot Record) 格式,但是有雨近年来,磁盘扇区容量不断扩大,造成读写上出现了一些困扰,甚至有些大于2TB 以上的磁盘分区已经让某些操作系统无法存取。因此后来又多了一个新的磁盘分区格式,称为 GPT (GUID partition table)
那么盘片有点像下面这样:


磁道=柱面
磁头(磁盘两面各一个)
每个磁道有几个扇区
3.5寸1.44M 软盘,有两个磁头,正反两面各一个;80个磁道(即80个圆圈);每个磁道有18个扇区;每个扇区为512字节。
软盘容量 = 512字节/扇区 x 2面 x 80磁道(柱面)/面 x 18扇区/磁道 = 1440 KB
磁头,即面:编号[0, 1]
80个磁道,即柱面(圆圈):编号[0, 79]
18个扇区:编号[1, 18]
相对扇区号[0, 2879]:相对扇区号按照柱面排序,即从最外头的圆圈到最里头的圆圈。
0柱面正面(即磁头号为0)的1-18扇区为0-17号相对扇区,0柱面反面(即磁头号为2)的1-18扇区为18-35号相对扇区,然后是1柱面,2柱面,直到79柱面。
mbr是机械硬盘开头第一个扇区的名称
主要存了两个数据
- 主要开机记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有446 Bytes
- 分区表(partition table):记录整颗硬盘分区的状态,有64 Bytes
分区的最小单位“通常”为柱面(cylinder)

p是主要分区,e是扩展分区之后细分的叫做逻辑分区
gpt的出现主要是为了大量存储的时候方便使用
那在 Linux 下面就会看到有一颗 70TB 左右的磁盘! 如果使用 MBR 的话…那得要 2TB/2TB 的割下去,虽然 Linux kernel 现在已经可以通过某些机制让磁盘分区高过 63 个以上,但是这样就得要割出将近 40 个分区~ 真要命… 为了解决这个问题,所以后来就有 GPT 这个磁盘分区的格式出现了!
gpt分区格式可以分2t以上的硬盘,而mbr不可以
并不是所有的操作系统都可以读取到 GPT 的磁盘分区格式喔!
由于gpt分区已经没有所谓的主、延伸、逻辑分区概念,所以每个区都可以被看作是主分区
开机启动bios和uefi bios
早期的是bios启动
现在的大多是uefi启动
bios是开机之后,计算机系统会执行的第一个程序
接下来BIOS会去分析计算机里面有哪些储存设备,我们以硬盘为例,BIOS会依据使用者的设置去取得能够开机的硬盘, 并且到该硬盘里面去读取第一个扇区的MBR位置。 MBR这个仅有446 Bytes的硬盘容量里面会放置最基本的开机管理程序, 此时BIOS就功成圆满,而接下来就是MBR内的开机管理程序的工作了。
这个开机管理程序的目的是在载入(load)核心文件
简单的说,整个开机流程到操作系统之前的动作应该是这样的:
- BIOS:开机主动执行的固件,会认识第一个可开机的设备;
- MBR:第一个可开机设备的第一个扇区内的主要开机记录区块,内含开机管理程序;
- 开机管理程序(boot loader):一支可读取核心文件来执行的软件;
- 核心文件:开始操作系统的功能…
为什么要先装window后装linux 那现在请你想一想,为什么人家常常说:“如果要安装多重开机, 最好先安装Windows再安装Linux”呢?这是因为:
- Linux在安装的时候,你可以选择将开机管理程序安装在MBR或各别分区的开机扇区, 而且Linux的loader可以手动设置菜单(就是上图的M1, M2…),所以你可以在Linux的boot loader里面加入Windows开机的选项;
- Windows在安装的时候,他的安装程序会主动的覆盖掉MBR以及自己所在分区的开机扇区,你没有选择的机会, 而且他没有让我们自己选择菜单的功能。
因此,如果先安装Linux再安装Windows的话,那MBR的开机管理程序就只会有Windows的项目,而不会有Linux的项目 (因为原本在MBR内的Linux的开机管理程序就会被覆盖掉)。 那需要重新安装Linux一次吗?当然不需要,你只要用尽各种方法来处理MBR的内容即可。 例如利用Linux的救援模式来挽救MBR啊!
uefi为什么要出现
bios只有16位的程序。
BIOS 其实不懂 GPT 耶!还得要通过 GPT 提供相容模式才能够读写这个磁盘设备
UEFI 使用 C 程序语言,比起使用组合语言的传统 BIOS 要更容易开发。也因为使用 C 语言来撰写,因此如果开发者够厉害,甚至可以在 UEFI 开机阶段就让该系统了解 TCP/IP 而直接上网! 根本不需要进入操作系统耶!这让小型系统的开发充满各式各样的可能性!
从上头我们可以发现,与传统的 BIOS 不同,UEFI 简直就像是一个低阶的操作系统~甚至于连主板上面的硬件资源的管理, 也跟操作系统相当类似,只需要载入驱动程序即可控制操作。同时由于程控得宜,一般来说,使用 UEFI 接口的主机,在开机的速度上要比 BIOS 来的快上许多! 因此很多人都觉得 UEFI 似乎可以发展成为一个很有用的操作系统耶~不过,关于这个,你无须担心未来除了 Linux 之外,还得要增加学一个 UEFI 的操作系统啦!为啥呢?
为什么我们需要关闭安全启动
此外,由于过去 cracker 经常借由 BIOS 开机阶段来破坏系统,并取得系统的控制权,因此 UEFI 加入了一个所谓的安全启动 (secure boot) 机制, 这个机制代表着即将开机的操作系统必须要被 UEFI 所验证,否则就无法顺利开机!微软用了很多这样的机制来管理硬件。 不过加入这个机制后,许多的操作系统,包括 Linux ,就很有可能无法顺利开机喔!所以,某些时刻,你可能得要将 UEFI 的 secure boot 功能关闭, 才能够顺利的进入 Linux 哩! (这一点让自由软件工作者相当感冒啦!)
与 BIOS 模式相比,虽然 UEFI 可以直接取得 GPT 的分区表,不过最好依旧拥有 BIOS boot 的分区支持, 同时,为了与 windows 相容,并且提供其他第三方厂商所使用的 UEFI 应用程序储存的空间,你必须要格式化一个 vfat 的文件系统, 大约提供 512MB 到 1G 左右的容量,以让其他 UEFI 执行较为方便
挂载

上图中假设我的硬盘分为两个分区,partition 1是挂载到根目录,至于partition 2则是挂载到/home这个目录。 这也就是说,当我的数据放置在/home内的各次目录时,数据是放置到partition 2的,如果不是放在/home下面的目录, 那么数据就会被放置到partition 1了!
hhhhh
第四章


