第零章:梨妞壳斯的前情提要
操作系统
操作系统是一组程序,这组程序的重点在于管理电脑上所有活动以及驱动系统中的所有硬件
其功能就是让CPU开始判断逻辑于运算数值,让内存开始加载/读出数据于程序代码,让硬盘,网卡可以开始传输数据。让外设开始在硬件上运行
系统内核kernel
内核主要提供一些管理功能。所以用户不能直接使用,而是内核程序防止在内存当中的区块是手保护的,并且,启动后一致常驻在内存里
系统调用(System Call)
操作系统会提供一套api。让人根据api去开发软件。开发的软件会在内核上运行。
内核功能
系统调用接口 沟通内核和应用程序
进程管理 控制任务,让CPU资源做有效分配。提供良好的CPU调度机制。
内存管理 由于系统程序代码和数据都必须放到内存中,通常内核会提供虚拟内存。当内存不住可以提供交换分区
文件系统管理 文件系统的管理,数据的输入输出
设备驱动 提供内核对硬件的管理,现在大部分可加载模块,可以将驱动程序编译成模块,无需重新编译内核。
驱动程序
驱动的出现主要是为了解决:不同类型的硬件。操作系统不可能都在他的内核直接支持了。为了让操作系统驱动这个硬件。操作系统通常会提供一个api给硬件开发商。让他们可以根据这个接口设计可以驱动硬件的驱动程序。这样,用户安装驱动程序后,就可以在操作系统使用硬件了。
得出一个谁都知道,但还是请你听我废话总结以下的结论:
操作系统会提供api,让开发驱动的去写他们的驱动程序;驱动程序由厂商提供。不同操作系统所需的驱动程序不相同!!
应用程序
是根据操作系统提供的API开发出来的软件
POSIX
POSIX(Portable Operating System Interface,便携式操作系统接口) 是由 IEEE 制定的一个操作系统标准,主要定义 Unix 类操作系统 应该如何提供系统调用和接口
POSIX 的目标: 让程序在不同操作系统上可移植
只要操作系统遵守 POSIX 标准,程序就可以在多个系统上运行,无需大量修改。
例如:
- Linux
- macOS
- FreeBSD
- AIX
- Solaris
这些系统都遵循 POSIX 标准。
POSIX 包含哪些内容?
POSIX 定义了一套 标准 API,包括:
文件操作
open()`, `read()`, `write()`, `close()`, `lseek()进程与线程
fork()`, `exec()`, `pthread_create()`, `pthread_join()信号处理
signal()`, `sigaction()内存管理
mmap()`, `munmap()文件权限
chmod()`, `chown()`, `umask()进程间通信(IPC)
管道、消息队列、共享内存、信号量等。
这些 API 组成了一个“统一接口”。
3. POSIX 的意义是什么?
➤ 1. 程序可移植性提高
写一次代码,可以在多个类 Unix 系统运行。
➤ 2. 系统接口标准化
应用程序开发不依赖某个特定操作系统。
➤ 3. 多线程标准:pthread
POSIX 线程(pthread)是跨平台通用的。
Linux 不是 官方 POSIX 认证系统,但:
Linux 基本遵循 POSIX 标准
常用系统调用与接口几乎全部兼容 POSIX
Linux 还扩展了许多非 POSIX 的能力
1、Linux
现在开始谈谈Linux:想到什么写什么咯。
我们先从安装说起:首先你得理解磁盘分区:磁盘的磁片上面主要可以分为扇区和磁道两种单位。扇区的大小设计分别有512字节和4K字节两种,整块磁盘的第一个扇区都非常重要。早期存在第一个扇区里的是MBR。后来随着磁盘容量的补段扩大,造成一些读写上的困扰。所以后来的新多了一个叫GPT的分区格式。具体对不同分区的讲解可以查看相关资料。这里主要讲讲系统。
启动流程中的BIOS和UEFI启动检测程序
先说说CMOS和BIOS。其中cmos的主要功能为了记录下主板上的重要参数例如时间、CPU电压频率等。BIOS是写入到主板上某一块flash和EEPROM的程序,可以在计算机启动时执行以加载CMOS中的参数,并尝试调用引导程序进一步进入操作系统中。其中BIOS程序也可以修改CMOS中的程序。
硬件参数且嵌入在主板上面的存储器,BIOS则是一个写入到主板上的一个固件(再次说明,固 件就是写入到硬件上的一个软件程序)。这个BIOS就是在启动的时候,计算机系统会主动执行的 第一个程序。 接下来BIOS会去分析计算机里面有哪些存储设备,我们以硬盘为例,BIOS会依据用户的设置去 取得能够启动的硬盘,并且到该硬盘里面去读取第一个扇区的MBR位置。MBR这个仅有446字节的 硬盘容量里面会放置最基本的启动引导程序,此时BIOS就功成圆满,而接下来就是MBR内的启动引 导程序的工作了。 这个启动引导程序的目的是在加载(load)内核文件,由于启动引导程序是操作系统在安装的时 候所提供的,所以它会认识硬盘内的文件系统格式,因此就能够读取内核文件,然后接下来就是内核 文件的工作,启动引导程序与BIOS也功成圆满,将之后的工作就交给大家所知道的操作系统。 简单地说,整个启动流程到操作系统之前的过程应该是这样的。 1.BIOS:启动主动执行的固件,会认识第一个可启动的设备; 2.MBR:第一个可启动设备的第一个扇区内的主引导记录块,内含启动引导代码; 3.启动引导程序(bootloader):一个可读取内核文件来执行的软件; 4.内核文件:开始启动操作系统 要注意,如果你的分区表为GPT格式的话,那么BIOS也能够从LBAO的MBR兼容区块读取
文件系统特性
文件除了实际内容通常还包括Linux操作系统的文件权限(rwx)与文件属性(拥有者,用户组,时间参数等)。文件系统会将两部分数据分别存放在不同区块。权限与属性会放到inode中。实际内容则放到数据区块中
- 超级区块 记录次文件系统的整体信息,包括inode数据区块总量。使用量。剩余量,以及文件系统的格式与相关信息等
- inode区块 记录文件的属性。一个文件占用过一个indode,同时记录此文件数据所在的号码区块
- 数据区块 实际内容