Linux内核简介

1、概述

Linux系统大致分为三层
    • 靠近硬件的底层是内核,即Linux操作系统常驻内存部分
    • 中间层是内核之外的shell层,即操作系统的系统程序部分
    • 最高层是应用层,即用户程序部分
内核是Linux操作系统的主要部分,它实现进程管理、内存管理、文件系统、设备驱动和网络系统等功能,从而 为核外的所有程序提供运行环境。

这里写图片描述
• 操作系统可划分为内核和系统程序两部分。系统程序及其他所有程序都在内核之上运行,它们与内核之间的接 口由操作系统提供的一组“抽象指令”定义,这些抽象指令称为“系统调用”。
• 内核程序在系统启动时被加载,然后它会初始化计算机硬件资源,并开始Linux的启动过程。
• 进程控制系统用于进程管理、进程同步、进程通信、进程调度和内存管理等。
• 进程是系统中的动态实体。控制进程的系统调用包括进程的创建、终止、执行、等待、空间扩充及信号传送 等。进程调度模块为进程分配CPU。Linux系统的进程调度算法采用多级队列轮转法。
• 内存管理控制内存分配与回收。系统采用两种策略管理内存:交换和请求分页。根据系统中物理内存空间的使 用情况,进程映像在内存和辅存(磁盘)之间换入或换出。
• 文件系统管理文件,分配文件空间,管理空闲空间,控制对文件的访问,并为用户检索数据。Linux系统使用虚 拟文件系统VFS,允许Linux支持多种不同的文件系统。
• 文件系统利用缓冲机制访问文件数据。缓冲机制与块设备驱动程序相互作用,以启动从核心向块设备写数据, 或者从块设备向核心传送(读)数据。
• Linux系统支持三种类型的硬件设备:字符设备、块设备和网络设备。
• 核心底层的硬件控制模块负责处理中断并与机器通信。

2、进程管理

1、进程和线程的概念
进程是程序的一次执行过程,包含三种基本状态:运行态、就绪态和封锁态(或等待态)。
    ①. 运行:当一个进程在处理机上运行时,则称该进程处于运行状态。处于此状态的进程的数目小于等于处理 器的数目,对于单处理机系统,处于运行状态的进程只有一个。在没有其他进程可以执行时(如所有进程 都在阻塞状态),通常会自动执行系统的空闲进程。
    ②. 就绪:当一个进程获得了除处理机以外的一切所需资源,一旦得到处理机即可运行,则称此进程处于就绪 状态。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排 入低优先级队列;当进程由I/O操作完成而进入就绪状态时,排入高优先级队列。
    ③. 阻塞:也称为等待或睡眠状态,一个进程正在等待某一事件发生(例如请求I/O而等待I/O完成等)而暂时 停止运行,这时即使把处理机分配给进程也无法运行,故称该进程处于阻塞状态。

这里写图片描述
在Linux中,进程有以下五种状态:
①. 运行态:此时,进程正在运行或准备运行(即就绪态)。当前进程由运行指针所指向。
②. 可中断等待态:此时进程在“浅度”睡眠——等待一个事件的发生或某种系统资源,它能够被信号或中断 唤醒。当所等待的资源得到满足时,它也被唤醒。
③. 不可中断等待态:进程处于“深度”睡眠的等待队列中,不能被信号或中断唤醒,只有所等待的资源得到 满足时,才能被唤醒。
④. 停止态:通常由于接收一个信号,致使进程停止。正在被调试的进程可能处于停止态。
⑤. 僵死态:由于某些原因,进程被终止了,但是该进程的控制结构task_struct仍然保留着。

进程的执行模式划分为用户模式和内核模式。如果在用户模式执行过程中出现系统调用或者发生中断事件,就 要运行操作系统程序,进程模式就变成内核模式。

线程可以看成是进程中指令的不同执行路线。
2、进程的结构
task_struct结构:相当于“进程控制块”。系统中有一个进程向量数组task,该数组的长度默认值是512B,该 数组的元素是指向task_struct结构的指针。在创建新进程时,Linux就从系统内存中分配一个task_struct结构, 并将它的首地址加入task数组。当前正在运行的进程的task_struct结构用current指针指示。包含:
    ①. 进程状态
    ②. 调度信息
    ③. 标识符。系统中每个进程都有唯一的一个进程标识符(PID)。每个进程还包括用户标识符(UID)和用户 组标识符(GID)。
    ④. 内部进程通信。Linux系统支持信号、管道、信号量等内部进程通信机制。
    ⑤. 链接信息。包括指向父进程、兄弟进程和子进程的指针。
    ⑥. 时间和计时器。内核要记录进程的创建时间和进程运行所占用的CPU时间
    ⑦. 文件系统。进程在运行时可以打开和关闭文件。task_struct结构中包括指向每个打开文件的文件描述符的 指针,并且包括两个指向VFS(虚拟文件系统)索引节点的指针。第一个索引节点是进程的根目录,第二 个节点是当前的工作目录
    ⑧. 虚拟内存。
    ⑨. 处理器信息。每个进程运行时都要使用处理器的寄存器及堆栈等资源。

在Linux系统中,每个系统都有一个系统堆栈,保存中断现场信息和进程进入内核模式后执行子程序嵌套调用的 返回现场信息。
3、对进程的操作
核心能对实施操作:创建进程、撤销进程、挂起进程、恢复进程、改变进程优先级、封锁进程、唤醒进程、调 度进程。
进程的创建:在Linux中,除初始化进程外,其他进程都是由系统调用fork()和clone()创建的。调用fork()和 clone()的进程是父进程,被生成的进程是子进程。
进程的等待:父进程创建子进程往往让子进程替自己完成某项工作。因此,父进程创建子进程后,通常等待子 进程运行终止。父进程可用系统调用wait3()等待它的任一个子进程终止,也可以用系统调用wait4()等待某个特 定的子进程终止。
进程的终止:当命令执行完,希望终止自己时,可在其程序某尾使用系统调用exit()。用户进程也可使用exit()来 终止自己。
进程映像的替换:改换进程映像,由系统调用execve()实现,它用一个可执行文件的副本来覆盖该进程的内存空 间。
4、进程调度
进程调度机制主要涉及调度方式、调度时机、调度策略和调度算法。
调度方式:基本采用“抢占式优先级”方式。核心为系统中每个进程计算出一个优先权,该优先权反映了一个 进程获得CPU使用权的资格,即高优先权的进程优先得到运行。
调度策略:
    • SCHED_FIFO一旦这种进程被调度而开始运行,就要一直运行到自愿让出CPU或者被优先权跟高的进程抢占 其执行权为止。
    • SCHED_RR“时间片轮转法”。一个运行进程分配一个时间片,当时间片用完后,CPU被其他进程抢占,而 该进程被送回相同优先级队列的末尾,核心动态调整用户态进程的优先级。
    • SCHED_OTHER进程优先权取决于两个因素:一个是进程剩余的时间配额,如果进程用完了配给的时间,则 相应优先权为0;另一个是进程的优先数nice,优先数越小,其优先级越高。
5、shell基本工作原理
步骤:
    ①. 读取用户由键盘输入的命令行。
    ②. 分析命令,以命令名作为文件名,其他参数改造为系统调用execve()内部处理所要求的形式。
    ③. 终端进程调用fork()建立一个子进程。
    ④. 终端进程本身用系统调用wait4()来等待子进程完成。当子进程运行时调用execve(),子进程根据文 件名到目录中查找有关文件,调入内存,执行这个程序。
    ⑤. 如果命令末尾有&号(后台命令符),则终端进程不用执行系统调用wait4(),而是立即发提示符,让用 户输入下一个命令,转步骤1。

3、文件系统

ext文件系统
Linux使用的主要文件系统是ext3(ext2文件系统的升级版)。
ext2文件系统的信息都保存在数据块中。对同一个ext2文件系统而言,所有数据块的大小都是一样的。

这里写图片描述
(1) 超级块:包含文件系统的大小和形式的基本信息,超级块包含以下内容:
①. 幻数。用于确认是ext2 文件系统。
②. 修订级别。文件系统的主版本号和次版本号
③. 安装计数和最大安装数
④. 块组号码
⑤. 数据块大小
⑥. 每组数据块的个数
⑦. 空闲块
⑧. 空闲索引节点
⑨. 第一个索引节点
(2) 索引节点:又称I节点,每个文件都有唯一一个索引节点。在ext2中索引节点起着文件控制块的作用。
索引节点有两种形式:盘索引节点和内存索引节点。盘索引节点存放在磁盘的索引节点表中,内存索引节点存放在系统专门开设的索引节点区中。所有文件在创建时都分配一个盘索引节点。当一个文件被打开或一个目录成为当前的工作目录时,系统内核就把相应的盘索引节点复制到内存索引节点中;当关闭文件时,就释放其内存索引节点。
虚拟文件系统
Linux支持多种文件系统,为此,必须使用一种统一的接口,这就是虚拟文件系统(VFS)。VFS建立在具体的文件系统之上

4、内存管理

Linux采用虚拟内存管理机制,使用交换和请求分页存储管理技术。
请求分页机制:
    ①. 逻辑空间分页。将一个进程的逻辑地址空间划分成若干大小相等的部分,每一个部分称为页面或页。每页都有一个编号,称为页号,页号从0开始依次编排
    ②. 内存空间分页。把内存也划分成与页面相同大小的若干存储块,称为内存页面或内存块
    ③. 逻辑地址表示
    页号P +   页内位移d
    由以上两部分组成
    ④. 内存分配原则。系统以内存块为单位把内存分给作业或进程,并且一个进程的若干页可分别装入物理上不想理你的内存块中。
    ⑤. 页表。
内存页的分配和释放
当一个进程开始运行时,系统要为其分配一些内存页;当该进程结束运行时,要释放其所占用的内存页。一般来说,Linux系统采用两种方法来管理内存页:位图和链表。
    ①. 位图:可以记录内存单元的使用情况。通常用一个二进制位(bit)记录一个内存页的使用情况。如果该内存页是空闲的,则对应位是1;如果该内存页已经分配出去,则对应位是0;
    ②. 链表:可以记录已分配的和空闲的内存单元。采用双向链表结构将内存单元链接起来,可以家去空闲内存的查找或链表的处理。
内存交换
当系统出现内存不足时,Linux内存管理子系统就需要释放一些内存页,从而增加系统中空闲内存页的数量,此任务是由内核的交换守护进程kswapd完成的。但是,它没有自己独立的地址空间,只使用系统空间,所以也把它称为线程。
交换守护进程所做的工作主要分为两部分:
    • 第一部分是在发现可用的内存页面已经短缺的情况下,找出若干不常用的内存页面,使它们从活跃状态(至少有一个进程的页表项指向该页面)变为不活跃状态(不再有任何进程的页表项指向该页面),为页面换出做好准备。
    • 第二部分是每次都要执行的工作,把那些已经处于不活跃状态的”脏“页面(即内存页的内容与盘上页面的内容不一致的页面)写入交换设备,使它们成为不活跃的”干净“页面(内存页内容与盘上页面内容一致)继续缓冲,或者回收一些内存页,使之成为空闲的内存页。

5、进程通信

信号机制
信号(也称软中断)机制是在软件层次上对中断机制的一种模拟。异步进程可以通过彼此发送信号来实现简单通信。
进程接到信号后,在一定时机做相应处理,可以采取以下4种处理方式:
    ①. 忽略信号。进程可忽略收到的信号,但不能忽略SIGKILL和SIGSTOP信号。
    ②. 阻塞信号。进程可以选择对某些信号予以阻塞。
    ③. 由进程处理该信号。用户在trap命令中可以指定处理信号的程序,从而进程本身可以系统中表明处理信号的处理程序的地址。当发出该信号时,由标明的处理程序进行处理。
    ④. 由系统内核处理。
每个进程的task_struct结构中都有一个指针sig,它指向一个sign_struct结构。该结构中有一个数组action[],其中的元素确定了当进程接收到一个信号时应执行什么操作。
管道文件
管道是一种两个进程间进行单向通信的机制。因为管道传递数据的单向性,管道又称为半双工管道。管道的这一特点决定了器使用的局限性。管道是Linux支持的最初Unix IPC形式之一,具有以下特点:
    • 数据只能由一个进程流向另一个进程(其中一个读管道,一个写管道);如果要进行双工通信,需要建 立两个管道。
    • 管道只能用于父子进程或者兄弟进程间通信。,也就是说管道只能用于具有亲缘关系的进程间通信。
除了以上局限性,管道还有其他一些不足,如管道没有名字(匿名管道),管道的缓冲区大小是受限制的。管道所传输的是无格式的字节流。这就需要管道输入方和输出方事先约定好数据格式。虽然有那么多不足,但对于一些简单的进程间通信,管道还是完全可以胜任的。
使用管道进行通信时,两端的进程向管道读写数据是通过创建管道时,系统设置的文件描述符进行的。从本质上说,管道也是一种文件,但它又和一般的文件有所不同,可以克服使用文件进行通信的两个问题,这个文件只存在内存中。
通过管道通信的两个进程,一个进程向管道写数据,另外一个从中读数据。写入的数据每次都添加到管道缓冲区的末尾,读数据的时候都是从缓冲区的头部读出数据的

6、设备管理

在Linux系统中,硬件设备分为三种:块设备、字符设备和网络设备。

7、中断、异常和系统调用

中断是CPU对系统发生的某个事件作出的一种反应,CPU暂停正在执行的程序,保留现场后,自动地转去执行相应的处理程序,处理完该事件后,再返回断点继续执行被”打断“的程序。
中断可以分为以下三类:
    ①. 由CPU外部引起的,称为中断,如I/O中断、时钟中断、控制台中断等。
    ②. 来自CPU的内部事件或程序执行中 的事件引起的过程,称为异常。
    ③. 由于在程序中使用了请求系统服务的系统调用而引发的过程。称为陷入(trap或陷阱)。

8、网络系统

在Linux网络中,网络数据从用户进程传输到网络设备需要经历4个层次
用户进程——>socket——>网络协议——>网络设备
socket好像通信线的插口,只要通信双方都有插口,并且两个插口之间有通信线路连接,就可以互相通信
socket在逻辑上有三个特征:网域、类型和协议。
    ①. 网域:它表明一个插口用于哪一种网络。
    ②. 类型:它表明在网络中通信所遵循的模式。网络通信中有两种主要模式:一种称为”有连接“模式,另一种称为”无连接“模式。
    ③. 协议:它表明具体的网络规程。

这里写图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值