操作系统简介
操作系统概念:操作系统处于硬件和应用程序的中间层,控制和管理整个计算机系统的硬件和软件资源,提供给用户和其他软件方便的接口和环境,它是计算机系统的最基本的系统软件。
操作系统功能:
- 处理机管理
- 存储器管理
- 设备管理
- 文件管理
处理机管理
进程控制:创建和撤销进程
进程同步:对多个进程的运行进行协调
进程通信:实现进程之间的信息交换
调度:按照一定的算法将处理机分配给各个进程
存储器管理
内存分配:存储空间的分配和回收
地址变换:将逻辑地址变换为物理地址
内存保护:防止因用户程序错误破坏系统或其他用户,防止程序之间的相互干扰
内存扩充:在逻辑上为用户提供一个比实际内存更大的存储空间
设备管理
设备分配:按照设备类型和相应的分配算法,将I/O设备分配给哪一个进程
设备处理:设备处理程序用以实现CPU和设备控制器之间的通信
缓冲管理:设置缓冲区的目的是为了缓和I/O设备与CPU速度不匹配的矛盾
缓冲管理程序负责完成缓冲区的分配、释放及有关的管理工作
文件管理
文件存储空间的管理
文件基本操作:创建文件,删除文件,打开文件,关闭文件,读写文件
文件共享:一个文件被多个用户或程序使用
文件保护:保护文件数据安全,口令保护,加密保护和访问控制
Linux系统历史
1969年,Unix诞生于贝尔实验室
1984年,Andrew S.Tanenbaum开发了用于教学的类Unix系统,命名为MINIX.只是一个用于教学目的的简单操作系统,而不是一个强有力的实用操作系统
1991年,芬兰赫尔辛基大学计算机系学生Linus Torvalds使用intel处理机开发的操作系统。将早期版本发布到网络,很多开发者发现问题,解决问题,并不断完善其功能.
Linux遵循GPL版权许可协议
GNU计划是由Richard Stallman在1983年9月27日公开发起的,目标是创建一套完全自由的操作系统。GPL许可的核心保证任何人有共享和修改自由软件的自由,任何人有权取得、修改和重新发布自由软件的源代码权利
因为GNU的发展理念,使得Linux得到了快速的发展,我们一般所指的Linux,其实全称应该是GNU/Linux
1991: Linux内核在网络公开发布,8000多行代码
1992:在GNU GPL下Linux内核被重新授权使用,产生了第一个“Linux发行版本”
1993:超过100个开发者致力于Linux内核开发。内核逐渐适应了GNU的环境
1994:发布Linux的1.0版本。XFree86项目组提供了一个图形化用户界面(GUI).同年Red Hat公司和SUSE发行了他们各自的Linux1.0分发版本
1995: Linux被移植到DEC Alpha和Sun公司的SPARC平台上,而在接下来的几年里它又被广泛地移植到更多的平台上。
1996: Linux内核2.0版本发布。此时内核已经支持多处理器,确定了Linux的吉祥物:企鹅
1998:很多大公司,诸如IBM,Compaq,Oracle表示支持Linux系统。另外,一部分程序员开始了图形化用户界面KDE的开发
2020.1 Linux内核源码树共有27 85万行、887925次commit和大约21074位不同的作者参与
linux系统特点
- 免费开源
- 模块化程度高
- Linux系统广泛的硬件支持
- 安全稳定
- 多用户,多任务
- 良好的可移植性
Linux内核简介
Linux内核版本号由3个数字组成:r.x.y
r:主版本号
x:从版本号,偶数表示稳定版本;奇数表示开发中版本
y:修订版本号,错误修补的次数
在内核版本的普通数字之后添加后缀rc表示待发布5.8-rc6
longterm: Long Term Support的缩写,长期维护的意思
Linux内核官方网站:https://www.kernel.org/
获取linux内核
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
https://cdn.kernel.org/pub/linux/kernel/
https://mirror.tuna.tsinghua.edu.cn/kernel/
http://mirrors.163.com/kernel/
内核源代码一般以gzip和bzip2两种方式发布
bzip2的内核linux-x.y.z.tar.bz2
tar jxvf linux-x.y.z.tar.bz2
gzip的内核linux-x.y.z.tar.gz
tar zxvf linux-x.y.z.tar.gz
目录 | 描述 |
---|---|
arch | 特定体系结构的源码 |
block | 块设备I/O层 |
crypto | 加密API |
Documentation | 内核源码文档 |
drivers | 设备驱动程序 |
firmware | 使用某些驱动程序而需要的设备固件 |
fs | VFS和各种文件系统 |
include | 内核头文件 |
init | 内核引导和初始化 |
ipc | 进程间通信代码 |
make menuconfig
make oldconfig
make xxx_defconfig在/arch目录下找,找到单板相似的架
构配置xxx_defconfig以其作为默认配置
make
编译完成后:在arch/xx/boot下生成内核镜像
CONFIG_IKCONFIG_PROC:内核的配置文件会存放在/proc/config.gz中
General setup --->
<*>Kernel.config support
[*]Enable access to .config through /proc/config.gz
ZTE
zcat/proc/config.gz>.config获取内核使用的配置文件
编译内核模块:make modules
make -C $(KDIR) M=$(PWD)modules
-C选项:此选项指定内核源码的位置,make在编译时将会进入内核源码
目录,执行编译,编译完成时返回
M=$(PWD):需要编译的模块源文件地址
modules将源文件编译并生成内核模块
modules install:安装这个外部模块
clean:卸载源文件目录下编译过程生成的文件
内核开发特点
-
内核编程时既不能访问C库也不能访问标准C头文件
-
内核编程时使用GNUC
-
内核编程时缺乏像用户空间那样的内存保护机制
-
内核编程时难以执行浮点运算
-
内核只有一个很小的定长堆栈
-
由于内核支持异步中断、抢占和SMP,因此必须时刻注意同步和并发
-
考虑可移植性
常用网站
http://kernel.org
http://kernelnewbies.org
http://lwn.net
https://dev.zte.com.cn/(中兴开发者社区)
https://elixir.bootlin.com/linux/latest/source
http://www.wowotech.net/
https://www.kernel.org/doc/html/latest/index.html