Linux课程报告
一、精简的Linux模型
Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。
Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。
Linux的主要模型结构如下:

二、进程管理
程序: 程序是指令、数据、及其组织方式的集合
进程:是程序执行的基本实体,是资源分配的基本单位(线程是调度的基本单位)
第一,每一个进程都有它自己的地址空间
第二,进程是执行中的程序
1. 进程的创建
进程在执行过程中可能通过 fork() 创建多个新的进程。创建进程称为父进程,而新的进程称为子进程。每个新进程可以再创建其他进程,从而形成进程树。
Linux中第一个进程是 pid==1 的一号进程 init ,它是其它所以进程的父进程。
资源的分配
当一个进程创建子进程时,子进程可以从操作系统/父进程那里获得资源子集。
新进程的可能执行方式
- 父进程与子进程并发执行。
- 父进程等待
wait(),直到某个或全部子进程执行完。
新进程可能的地址空间
子进程是父进程的复制品(它具有与父进程同样的程序和数据)。
子进程加载另一个新程序。
2. 进程的终止
进程终止的原因
1 子进程使用了超过它所分配的资源(为判定是否发生这种情况,父进程应有一个机制,以检查子进程的状态)。
2 分配给子进程的任务,不再需要。
3 父进程正在退出,而且操作系统不允许无父进程的子进程继续执行。
僵尸进程
产生:当子进程终止,OS释放其资源。但是由于父进程未调用 wait() ,所以它位于进程表中的条目还是存在的。这样的进程被称为僵尸进程。
所有进程终止时都会过渡到这种状态,但是一般而言僵尸只是短暂存在。一旦父进程调用了 wait(),僵尸进程的进程标识符和它在进程表中的条目就会释放。
孤儿进程
如果父进程没有调用 wait() 就终止,以致于子进程成为孤儿进程,那么这会发生什么?Linux 和 UNIX 对这种情况的处理是:将 init 进程作为孤儿进程的父进程。进程 init 定期调用 wait(),以便收集任何孤儿进程的退出状态,并释放孤儿进程标识符和进程表条目。
3. 进程的状态
运行态:资源够,占用处理器
就绪态:资源够,就差处理器
等待态:资源不够
阻塞:指使一个进程让出处理器,去等待一个事件,如等待资源、等待I/O完成、等待一个事件发等——阻塞后进程被挂起
挂起:挂起就绪、挂起阻塞
挂起进程在操作系统中可以定义为暂时被淘汰出内存的进程,机器的资源是有限的,在资源不足的情况下,操作系统对在内存中的程序进行合理的安排,其中有的进程被暂时调离出内存,当条件允许的时候,会被操作系统再次调回内存,重新进入等待被执行的状态即就绪态,系统在超过一定的时间没有任何动作
什么是线程?
线程是调度的基本单位。
特点:
轻。线程实体只拥有必要的、能保证独立运行的资源(程序、数据、TCB)。因为轻,所以创建、调度快。
独立调度的基本单位。
可并发执行。
共享进程资源。包括:内存地址空间、进程已打开的文件、信号量等等。
线程之间怎样进行交互?
线程的通信就比较简单,有一大块共享的内存,只要大家的指针是同一个就可以看到各自的内存。
进程间的通信
每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)
1. 管道通信
管道的本质是内核缓冲区
2. 信号
来源:
硬件:ctrl+c、硬件异常
软件:kill、软件异常
3. 消息队列
4. 共享内存
5. 信号量
信号量与互斥量之间的区别:
互斥量用于线程的互斥,信号量用于线程的同步。这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。
互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。
6. 套接字
进程的调度
1. FCFS 先来先服务
2. 短作业优先
3. 高优先权优先
抢占式
非抢占式
4. 高响应比优先
Rp = (等待时间 + 要求服务时间) / 要求服务时间
三、中断与用户态和内核态
什么是用户态和内核态
用户态进程运行在用户态空间
内核态进程运行在内核态空间
32位的OS的寻址空间有2^32 = 4GB,虚拟空间共4GB,其中最高1GB为内核空间,由内核使用,低3GB由应用程序使用,为用户态空间
为什么需要用户态和内核态
CPU 将指令分为特权指令和非特权指令,
对于那些危险的指令,只允许操作系统及其相关模块使用,
普通应用程序只能使用那些不会造成灾难的指令
Intel将指令特权等级分为了Ring0~Ring3,Linux只使用了Ring3(用户态)和Ring0(内核态)
如何从用户态进入内核态
系统调用
过程:
0. 进程传递系统调用号给eax寄存器
1. 进入系统调用:
在内核态栈保存大多数寄存器内容
2. 执行系统调用
调用系统调用服务例程的相应C函数来处理系统调用
3. 退出系统调用处理程序
将内核态栈保存的值加载到寄存器
软中断
硬中断:主要是用来通知操作系统系统外设状态的变化
硬中断是由外设引发的,而软中断是执行中断指令产生的
硬中断的中断号是由中断控制器提供的,软中断的中断号由指令直接指出,无需使用中断控制器
硬中断是可屏蔽的,软中断不可屏蔽
硬中断处理程序要确保它能快速地完成任务,这样程序执行时才不会等待较长时间,称为上半部
软中断处理硬中断未完成的工作,是一种推后执行的机制,属于下半部
中断的过程
硬件:
1. 中断源发出中断请求;
2. 判断当前处理机是否允许中断和该中断源是否被屏蔽;
3. 优先权排队;
4. 处理机执行完当前指令或当前指令无法执行完,则立即停止当前程序,保护断点地址和处理机当前状态,转入相应的中断服务程序;
软件:
5. 执行中断服务程序;
6. 恢复被保护的状态,执行“中断返回”指令回到被中断的程序或转入其他程序。
四、影响Linux性能的因素
硬件上
cpu
目前大部分CPU在同一时间内只能运行一个线程,超线程的处理器可以在同一时间运行多个线程,因此,可以利用处理器的超线程特性提高系统性能。
内存
内存的大小也是影响Linux性能的一个重要的因素,内存太小,系统进程将被阻塞,应用也将变得缓慢,甚至失去响应;内存太大,导致资源浪费。Linux系统采用了物理内存和虚拟内存两种方式,虚拟内存虽然可以缓解物理内存的不足,但是占用过多的虚拟内存,应用程序的性能将明显下降,要保证应用程序的高性能运行,物理内存一定要足够大;但是过大的物理内存,会造成内存资源浪费,例如,在一个32位处理器的Linux操作系统上,超过8GB的物理内存都将被浪费。因此,要使用更大的内存,建议安装64位的操作系统,同时开启Linux的大内存内核支持。
磁盘I/O
磁盘的I/O性能直接影响应用程序的性能,在一个有频繁读写的应用中,如果磁盘I/O性能得不到满足,就会导致应用停滞。好在现今的磁盘都采用了很多方法来提高I/O性能,比如常见的磁盘RAID技术。
操作系统相关资源
文件系统优化
文件系统的优化是系统资源优化的一个重点,在Linux下可选的文件系统有ext2、ext3、ReiserFS、ext4、xfs,根据不同的应用,选择不同的文件系统。

浙公网安备 33010602011771号