Linux课程总结
一、一个精简的Linux系统概念模型
一个精简的Linux系统应该包含内核,shell和文件系统三个部分。
1.内核
内核包含内存管理、进程管理、设备管理、文件系统管理和网络管理这五部分。
(1)内存管理
采用虚拟内存设计,将物理内存分成小块,并建立物理地址和逻辑地址的映射。还要辅以内存分配策略、空闲内存管理策略、内存交换策略等。
(2)进程管理
使用PCB存储进程信息并管理进程。采用一定的进程调度策略让进程轮流上CPU运行。还要实现进程通信等功能。
(3)设备管理
用设备驱动程序控制操作系统和硬件设备的交互。设备驱动程序再提供一组操作系统可理解的抽象接口完成和操作系统之间的交互,然后用户就可以提供系统调用对设备进行操作而不必关注设备管理的底层细节。
(4)文件系统管理
使用虚拟文件系统管理不同的文件系统,并向操作系统提供通用的抽象接口。
(5)网络管理
实现各种网络标准(例如TCP/IP协议栈),管理网络设备。
2.shell
用户通过shell和内核进行交互。
3.文件系统
包含目录结构组织方式、磁盘分区、物理空间分配方式等。
二、模型验证
以打开文件为例说明。
当使用open()库函数时,将调用sys_open()系统调用。sys_open()的执行过程为:将接收的参数中的文件名传递给VFS,VFS通过文件名来查找该文件是否存在,若存在则返回文件描述符,若不存在则返回-1。
三、探究影响应用程序在上述模型中性能表现的因素
假设还有其他进程也要运行在此操作系统中。
(1)CPU性能
CPU性能越强,程序执行越快。
(2)磁盘性能
磁盘性能越强,读写速度就越快,程序执行就越快。
(3)链接方式
使用静态链接比动态链接快,因为使用动态链接时会有链接的时间开销。
(4)内存方面
是否给程序分配了足够大的空间会影响进程执行速度,因为频繁的缺页会使磁盘IO增多,使程序执行速度变慢。
(5)进程调度方面
进程调度策略会影响进程执行速度,例如若进程优先级较高,那么它的执行速度大概率快。
(6)网络性能
若程序使用到网络,那么网络性能也会影响执行速度。
(7)程序本身的编写
程序本身的编写方式也会也会影响其运行速度。
举一个例子如下:
某程序某段代码:

可以看到打开文件时使用了O_DIRECT选项,代表直接读写磁盘而绕过系统缓存。
使用top命令发现该进程CPU负载非常高,但是CPU使用率几乎为0。

使用perf top -g命令打开调用栈。

可以看出进程在通过系统调用 sys_read() 读取数据。并且从 new_sync_read 和 blkdev_direct_IO 能看出,进程正在对磁盘进行直接读,也就是绕过了系统缓存,每个读请求都会从磁盘直接读。
现在删掉该选项:
然后再次运行,使用top命令发现刚才的情况消失了。
使用perf top -g命令打开调用栈发现blkdev_direct_IO不再出现。


浙公网安备 33010602011771号