Linux课程作业
一. Linux系统概述
Linux内核主要有 5个子系统组成:进程调度 (SCHED) ,内存管理 (MM) ,虚拟文件系统 (VFS) ,网络接口 (NET)和进程间通信 ( IPC )。
1、进程调度
进程在进程调度子系统中微观串行,宏观并行。其余 4 个子系统都依赖于进程调度系统,因为每个子系统也需要挂起或恢复进程,当它们需要做这些工作时,都得和进程调度子系统打交道。进程的睡眠有两种情况,一种是因为得不到请求的资源而进入“深度睡眠”(TASK_UNINTERRUPTIBLE),深度睡眠直到得到请求的资源后才会醒来,其间不可被打断;另外一种是由于时间片用完,而进入的“浅度睡眠”(TASK_INTERRUPTIBLE),在浅度睡眠时,如果给进程发一个信号,它就会醒过来。在设备驱动编程中,当请求的资源不能得到满足时,驱动一般会调度其他进程执行,其对应的进程进入睡眠状态,直到它请求的资源被释放,才会被唤醒而进入到就绪状态。
设备驱动中,如果需要几个并发执行的任务,可以启动内核线程,启动内核线程的函数为:
int kernel_thread(int(*fn)(void *),void *arg,unsigned long flags);
2、内存管理
内存管理的主要作用是控制多个进程安全地共享主内存区域。当 CPU 带有内存管理单元 (MMU)时,Linux 内存管理完成为每个进程进行虚拟内存到物理内存的转换。Linux 2.6 内核可以支持无 MMU 的 CPU
一般而言,Linux 的每个进程享有 4GB 的内存空间,0~3GB 属于用户空间,3~4GB 属于内核空间,内核空间对常规内存,I/O设备内存以及高端内存有着不同的处理方式。
3、虚拟文件系统
Linux 虚拟文件系统 (VFS) 隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口。而且,它独立于各个具体的文件系统,是对各种文件系统的一个抽象,它使用超级块 super block 存放文件系统相关信息,使用索引结点 inode 存放文件的物理信息,使用目录项项 dentry 存放文件的逻辑信息。
4、网络接口
网络接口提供了对各种网络的标准存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序,网络协议部分负责实现每一种可能的网络传输协议,网络设备驱动程序负责硬件设备进行通信,每一种可能的网络硬件设备都有相应的设备驱动程序。
5、进程间的通信
Linux 支持多种通信机制,如信号量,共享内存,管道,信号等,这些机制可以协助多个进程、多资源的互斥访问、进程间的同步和消息传递。
二、模型验证
当应用进程(如c语言使用malloc)申请内存时,调用系统api,系统从用户态进入内核态,在Linux系统上,程序被载入内存时,内核为用户进程地址空间建立了代码段、数据段和堆栈段,在数据段与堆栈段之间的空闲区域用于动态内存分配。 内核数据结构mm_struct中的成员变量start_code和end_code是进程代码段的起始和终止地址,start_data和 end_data是进程数据段的起始和终止地址,start_stack是进程堆栈段起始地址,start_brk是进程动态内存分配起始地址(堆的起始 地址),还有一个 brk(堆的当前最后地址),就是动态内存分配当前的终止地址。 C语言的动态内存分配基本函数是malloc(),在Linux上的基本实现是通过内核的brk系统调用。brk()是一个非常简单的系统调用,只是简单地改变mm_struct结构的成员变量brk的值。 mmap系统调用实现了更有用的动态内存分配功能,可以将一个磁盘文件的全部或部分内容映射到用户空间中,进程读写文件的操作变成了读写内存的操作。在 linux/mm/mmap.c文件的do_mmap_pgoff()函数,是mmap系统调用实现的核心。do_mmap_pgoff()的代码,只是新建了一个vm_area_struct结构,并把file结构的参数赋值给其成员变量m_file,并没有把文件内容实际装入内存。
三、影响应用程序性能表现的因素
把应用程序带入模型分析性能
- 首先,应用程序需要从磁盘拷贝到内存,需要进行逻辑地址 -> 线性地址 ->物理地址的转换,这里可以通过快表机制来提升性能
- 由物理地址定位到磁盘地址, 需要进行I/O请求, 可以采用不同的磁盘调度策略来影响性能
- 将应用程序读取到内存之后,其所在的进程也创建起来了,此时通常会调用fork系统调用来创建子进程,系统调用的保存和恢复现场对应用程序的启动运行也有一定的影响. 通过CPU内部的存储器来快速保存现场和恢复
- 系统调用前期处理完,接下来需要对子进程内部资源(地址空间、页表、打开文件列表等)进行初始化,传统的进程创建(传统UNIX),是把父进程的所有资源复制到子进程中,即把父进程的地址空间中的内容全部复制到子进程的地址空间中,既耗时又效率低
-
进程创建完,就被作为可运行态进程放入运行队列中,若是没有其他IO请求或资源请求,就等待CPU资源,然后被执行,这里就该采用进程调度算法来进行进程的调度, 采用合适的调度算法可以使进程的性能提高
- 在运行过程中,由于内存容量的限制,有时不可避免地会发生缺页异常,需要进行页面置换,从分配的物理页中选择一页换出去,再将需要的页从磁盘换进来,该如何选取被换出的页,也是一个影响程序性能的重要因素,如果页面置换算法选取不当,就会导致较大的缺页率,从而需要频繁地读取磁盘,换进换出。

浙公网安备 33010602011771号