《linux内核的设计和实现》笔记

1. Unix历史: 1

2. Linux历史: 1

3. 内核组成: 1

4. 处理器在任何时间点上的活动范围: 1

5. 获取内核: 1

6. 使用补丁: 2

7. 内核源码树 2

8. 编译内核: 2

9. 衍生多个编译作业 2

10. 内核安装 2

11. 内核开发的特点 2

1. Unix历史:

1969年贝尔实验室设计了一个文件系统原型,最终演化成了unix

1973unixc语言重写。

具有影响力的unix进一步开发组织:加州大学伯克利分校BSD。发展到了今天的Darwin,Droaonfly BSD,FreeBSD,NetBSDOpenBSD

2. Linux历史:

1991芬兰大学生linus自己编写一个不成熟但五脏俱全的unix,它克隆了unix,但不是unix,它没有直接应用unix的源代码。

3. 内核组成:

3.1 中断服务程序

响应中断

3.2 进程调度程序

管理多个进程分享处理机

3.3 内存管理

管理进程地址空间

3.4 网络和进程间通信等系统服务

4. 处理器在任何时间点上的活动范围:

运行于内核空间:处于进程上下文,代表某个特定进程的执行。

运行于用户空间:处于中断上下文,与任何进程无关,代表处理特定的中断。

运行于用户空间:执行用户进程。

5. 获取内核:

www.kernel.com

解压:tar xvjf linux-x.y.z.tar.bz2

  或者tar xvzf linux-x.y.z.tar.gz

内核一般都在/usr/src/linux下,但是注意不能以root身份对其进行修改,即使在安装新内核时,/usr/src/linux目录下都应该原封不动。

6. 使用补丁:

Patch -pl < ../patch-x.y.z

7. 内核源码树

8. 编译内核:

Make config

遍历所有配置项,要求用户选择。时间很长。

Make menuconfig

利用基于ncurse的图形界面工具

Make xconfig

基于X11的图形工具

Make gconfig

基于gtk+图形界面

Make defconfig

根据自己的体系结构创建默认的配置,生成在config文件中,而且你可以直接更改它。

Make才是真正执行编译的命令。

9. 衍生多个编译作业

Make -jn

衍生n个作业。改善内核编译时间。

10. 内核安装

Make modules_install

11. 内核开发的特点

没有c

只能用GUN C

没有内存保护机制

浮点数很难使用

注重可移植性

只有一个很小的定长堆栈

支持异步终端,抢占和SMP,注意同步和并发

11.1 没有libc库

像没有外部库一样,内核代码中没有外部头文件。所以类似printf()函数都不能用。但是有printk()函数可以用,并且他可以通过一个标志设置优先级,来决定在什么地方显示。如:

PrintkKERN_ERR,”this is an error./n”);

11.2 GUN C

允许有内联函数:static inline void play(int ball);

允许内联汇编

存在分支申明:在大多数分支结果都可以确定的时候,可以用如likely()unlikely()对判断条件进行申明。这样的话可以大大提高性能。

if(likely(foo))

{}

或者

If(unlikely(foo))

{}

11.3 没有内存保护机制

如果是用户程序进行了非法的内存访问,内核会发送SIGSEGV,并结束进程。但是内核自己出现了,就没有办法了。

11.4 小容量的内核栈

通常x8632位机栈大小是8K64位机是16K,而且固定不变。

以下是关于《Linux内核设计实现》的笔记: 1. 进程管理 - 进程控制块(Process Control Block, PCB):一个进程在内核中的表示,包含了进程的状态、各种计数器和指针,以及进程所需要的资源。 - 进程调度:内核必须在可能的情况下公平地分配CPU时间片给每个进程。Linux内核使用完全公平调度(Completely Fair Scheduler, CFS)来实现这一点。 - 进程同步:进程在访问共享资源时需要同步,以避免冲突。Linux内核提供了多种同步机制,如信号量、自旋锁和读写锁等。 2. 内存管理 - 虚拟内存:每个进程都拥有自己的虚拟内存空间,这使得每个进程都可以认为自己独占整个系统内存。 - 页面置换:当物理内存不足时,Linux内核会使用页面置换算法将一部分未使用的页面从物理内存中移出,以便为正在运行的进程腾出空间。 - 内存映射文件:Linux允许将磁盘上的文件映射到进程的虚拟地址空间中,这样就可以像访问内存一样访问文件。 3. 文件系统 - 虚拟文件系统(Virtual File System, VFS):Linux内核中的抽象层,它允许系统支持多种文件系统格式,如ext4、FAT32等。 - I/O管理:内核必须管理所有的I/O操作,包括磁盘读写和网络通信等。 - 文件描述符:Linux内核使用文件描述符来标识打开的文件,每个进程都有一个文件描述符表。 4. 网络协议栈 - TCP/IP协议栈:Linux内核支持多种网络协议,其中最常用的是TCP/IP协议栈。 - Socket:在Linux中,进程之间通信的主要方式是使用Socket。Socket是一种抽象的概念,它代表了一个网络连接。 5. 设备驱动程序 - 驱动程序开发:Linux内核的设备驱动程序通常是以模块的形式开发的,它们可以动态地加载和卸载。 - 设备文件:Linux内核将设备表示为文件,它们可以通过文件系统接口来访问。 以上是《Linux内核设计实现》的一些重点内容和笔记,希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值