Linux课程报告

一、精简的Linux模型

Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。

Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。

Linux的主要模型结构如下:

二、进程管理

程序: 程序是指令、数据、及其组织方式的集合

进程:是程序执行的基本实体,是资源分配的基本单位(线程是调度的基本单位)

第一,每一个进程都有它自己的地址空间

第二,进程是执行中的程序

1. 进程的创建

进程在执行过程中可能通过 fork() 创建多个新的进程。创建进程称为父进程,而新的进程称为子进程。每个新进程可以再创建其他进程,从而形成进程树。

Linux中第一个进程是 pid==1 的一号进程 init ,它是其它所以进程的父进程。

资源的分配

当一个进程创建子进程时,子进程可以从操作系统/父进程那里获得资源子集。

新进程的可能执行方式

  1. 父进程与子进程并发执行。
  2. 父进程等待 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,根据不同的应用,选择不同的文件系统。

posted @ 2021-05-10 20:54  lzyqq  阅读(215)  评论(0)    收藏  举报