linux内核研究

合集下载

Linux操作系统内核性能测试与调优

Linux操作系统内核性能测试与调优

Linux操作系统内核性能测试与调优操作系统是计算机系统中最核心的软件之一,它负责协调和管理计算机硬件资源以及提供统一的用户界面。

Linux操作系统因其开放源代码、稳定性和安全性而备受欢迎。

然而,在大规模和高负载的环境中,Linux操作系统的性能可能会出现瓶颈。

因此,进行内核性能测试与调优是非常重要的。

一、性能测试的重要性在处理大量数据和并发用户请求时,操作系统的性能会成为瓶颈。

通过性能测试,我们可以了解操作系统在不同负载情况下的表现,进而定位和解决性能瓶颈。

性能测试有助于提高系统的响应时间、吞吐量和并发性能,从而确保系统的稳定运行。

二、性能测试的分类1. 压力测试:通过模拟实际用户行为或产生大量虚拟用户,并观察系统在负载增加的情况下的响应时间和吞吐量。

常用的压力测试工具包括Apache JMeter和Gatling等。

2. 负载测试:通过模拟实际业务场景,并且能够测试系统在高负载情况下的响应能力和稳定性。

这种测试方法可以帮助我们发现系统在繁忙时是否仍然能够正常工作,并识别可能存在的性能瓶颈。

3. 并发测试:通过模拟多个并发用户并行执行相同或不同的操作,以验证系统在并发访问下的性能表现。

这种测试方法可以评估系统的并发处理能力和资源利用率。

三、内核性能调优的重要性Linux操作系统的性能与其内核配置息息相关。

对内核的性能调优可以提高系统的响应速度、降低延迟和提高吞吐量。

通过调整内核参数和优化内核模块,可以使操作系统更好地适应特定的工作负载。

四、内核性能调优的方法1. 内核参数调整:根据系统的工作负载特点,适当调整内核参数。

例如,可以通过修改TCP/IP堆栈参数来提高网络性能,或者通过修改文件系统参数来提高磁盘I/O性能。

2. 内核模块优化:优化内核使用的模块,选择性加载和卸载不必要的模块,以减少内核的资源占用和启动时间。

3. 中断处理优化:通过合理分配和调整中断处理的优先级,减少中断处理的开销,提高系统的性能。

linux 内核 watchpoint 原理

linux 内核 watchpoint 原理

linux 内核watchpoint 原理Linux内核的watchpoint原理可以分为两个步骤:设置和触发。

在设置阶段,开发人员通过调试工具或调试命令,向处理器发送设置watchpoint的指令。

该指令包含要监视的内存地址、监视的访问类型(读、写或读写)、以及其他相关参数。

处理器接收到指令后,会将这些信息保存在调试寄存器中。

在程序执行过程中,当程序访问被watchpoint监视的内存地址时,处理器会产生一个异常信号,通知操作系统发生了异常情况。

操作系统接收到异常信号后,会将控制权交给调试器。

调试器根据异常信号中的信息,可以定位到触发watchpoint的指令,以及相关的寄存器状态。

通过分析这些信息,开发人员可以了解程序中的内存访问情况,从而进行调试。

在Linux内核中,watchpoint的实现主要依赖于调试寄存器。

这些寄存器用于存储被监视的内存地址、访问类型等信息。

当程序访问这些内存地址时,处理器会检查调试寄存器的值,如果与实际的内存地址匹配,则触发watchpoint。

具体的实现细节可能会因不同的处理器架构而有所差异。

但是,基本的原理是相似的。

在x86架构中,常用的调试寄存器包括DR0-DR7。

开发人员可以通过系统调用或者特定的汇编指令来设置这些寄存器的值。

值得注意的是,使用watchpoint调试内核时可能会影响系统性能,因为处理器的异常处理机制需要消耗额外的资源。

因此,在实际的生产环境中,watchpoint的使用应该谨慎考虑。

总结来说,Linux内核的watchpoint原理是利用调试寄存器来监视特定的内存地址,并在程序访问这些地址时触发异常信号。

通过这种方式,开发人员可以分析内存访问情况,以便进行调试。

然而,使用watchpoint时应考虑到其对系统性能的影响。

Linux内核.ppt

Linux内核.ppt
行交互操作的一种接口。
❖ LINUX文件系统: Linux文件系统是文件存放在磁盘等存储设
备上的组织方法。Linux能支持多种目前浒的文件系统,如EXT2、EXT3、 FAT、VFAT、ISO9660、NFS、SMB等。
❖ LINUX应用系统:标准的Linux系统都有一整套称为应
用程序的程序集,包括文本编辑器、编程语言、X Window、 办公套件、Internet工具、数据库等。
❖GNU 软件和派生工作均适用 GNU 通用公共许 可证,即 GPL(General Public License )
❖Linux的开发使用了众多的GUN工具
<>
GPL-开源软件的法律
❖GPL 允许软件作者拥有软件版权 ❖但GPL规定授予其他任何人以合法复
制、发行和修改软件的权利。
<>
2. Linux系统的主要特点
内核模块的能力
所有模块全部运行在内核态,直接调用函数,无需消息传递 支持多称多处理SMP机制
讲究效率的单模块操作系统
进程管理
内存管理
设备管理
文件管理
模块之间可以互相调用的单模块结构 <>
讲究效率的单模块操作系统
❖模块之间直接调用函数,除了函数调用 的开销外,没有额外开销。 ❖庞大的操作系统有数以千计的函数 ❖复杂的调用关系势必导致操作系统维护 的困难
个平台使它仍然能按其自身的方式运行的能力。Linux是一种可 移植的操作系统,能够在从微型计算机到大型计算机的任何环境 中和任何平台上运行。
3. LINUX的组成
❖ LINUX的内核:内核是系统的核心,是运行程序和管理
像磁盘和打印机等硬件设备的核心程序。
❖ LINUX SHELL: Shell是系统的用户界面,提供了用户与内核进

基于共享资源矩阵法的Linux内核隐蔽通道搜索研究的开题报告

基于共享资源矩阵法的Linux内核隐蔽通道搜索研究的开题报告

基于共享资源矩阵法的Linux内核隐蔽通道搜索研究的开题报告一、选题的背景和意义隐蔽通道是一种利用计算机系统中存在的隐藏的通信路径进行信息传输的技术。

它不需要使用网络协议栈中的标准通信机制,因此难以被检测和防御。

隐蔽通道可以被用于非法信息传输,网络钓鱼、远程控制等各种攻击行为。

因此,对于Linux操作系统中的隐蔽通道进行发现和分析具有重要的现实意义。

Linux内核是一种常见的操作系统内核,很多服务器和嵌入式设备都采用了Linux内核。

然而,Linux内核中存在着各种不同类型的隐蔽通道,这些隐蔽通道通过共享系统资源进行信息传输,给信息安全带来了威胁和挑战。

因此,对于Linux内核中的隐蔽通道进行发现和分析也是非常有必要的。

本文选题的意义在于探索一种新的隐蔽通道发现方法,基于共享资源矩阵法实现对于Linux内核中隐蔽通道的搜索。

通过收集和分析Linux内核中的共享资源信息,可以建立资源矩阵,从而进行隐蔽通道的搜索,实现对于系统中隐蔽通道的自动化发现和识别。

这种方法具有自动化、高效性和可扩展性等优点,适合应用于Linux内核中隐蔽通道的发现和防御。

二、前人研究现状目前,对于Linux内核中隐蔽通道的研究主要集中在两个方面:基于模型检测和基于特征分析。

基于模型检测的方法主要是通过建立系统模型,进行模拟和验证,检测系统中是否存在隐蔽通道。

该方法能够发现系统中的各种错误行为,但是需要花费大量的计算资源和时间。

同时,该方法对于复杂系统的调试和维护也比较困难。

基于特征分析的方法主要是通过收集系统中的特征信息,如进程信息、文件系统信息、网络连接信息等,进行分析和统计,从而发现系统中的隐蔽通道。

该方法相对于模型检测方法而言,具有实现简单、效率高等优点。

但是该方法也存在一定的局限性,如需要定义一定的特征分析规则,对系统资源的占用也有一定的要求。

三、拟采用的研究方法和技术路线本文拟采用基于共享资源矩阵法的方法,实现对于Linux内核中隐蔽通道的发现和分析。

Linux内核空间与用户空间通信机制的研究

Linux内核空间与用户空间通信机制的研究

Linux内核空间与用户空间通信机制的研究Linux kernel space and user space communicationmechanism摘要Linux是一个源码开放的操作系统,无论是普通用户还是企业用户都可以编写自己的内核代码,再加上对标准内核的裁剪从而制作出适合自己的操作系统,深受大家喜爱。

Linux系统中,在使用虚拟内存技术的多任务系统上,内核和用户有不同的地址空间,因此,在内核与用户之间进行数据交换需要专门的机制来实现。

一个或多个内核模块的实现并不能满足一般Linux 系统软件的需要,因为内核的局限性太大,内核空间与用户空间进程通信的方法就显得尤为重要。

本文将列举几种内核态与用户态进程通信的方法:Netlink通信机制,基于文件系统的通信机制,内核启动参数通信机制,并用实验板对几种重要的通信机制进行验证,详细分析它们的实现和适用环境,优缺点,并做出比较。

提供用户适合使用这种通信机制的环境,以便更好的运用Linux操作系统。

关键字内核空间用户空间地址空间ABSTRACTLinux is an open source operating system, whether ordinary users or business users can write your own kernel code, with the modification of the standard kernel,everyone can make up their own operating system, which makes Linux popular.In Linux systems, in the use of multi-tasking system with virtual memory technology, the kernel and the user have different address spaces, so the change of data between kernel and user needs Special Method to achieve. One or more kernel modules can not meet the general needs of Linux system software, just because the limitations of the kernel, make it important that the process communication method between kernel space and user space. In this article I will list some kernel mode and user mode process communication methods: Netlink communication mechanism, communication mechanism based on the file system, the kernel boot parameters of communication mechanism.I will analysis of their implementation, application environment, the advantages and disadvantages in detail, and make the comparison. I will provide users with suitable environment for each communication mechanism in order to let others make good use of Linux operating system.Keywords kernel space user space address spaces目录第一章绪论 (1)1.1操作系统发展史 (1)1.2选题背景及研究意义 (2)1.3主要工作 (2)第二章内核空间与用户空间通信机制概述 (4)2.1L INUX嵌入式操作系统简介 (4)2.2课题研究所需知识点解释 (4)2.3内核空间与用户空间通信概述 (5)第三章用户空间与内核空间通信机制 (9)3.1N ETLINK通信机制 (9)3.2基于文件系统的通信机制 (14)3.3内核启动参数通信机制 (22)第四章典型通信机制的验证 (24)4.1验证环境简介 (24)4.2N ETLINK通信机制 (24)4.3 PROCFS通信使用方法 (27)4.4系统调用的使用方法 (29)第五章结论 (32)5.1九种通信机制总结 (32)致谢 (33)参考文献 (34)第一章绪论1.1 操作系统发展史操作系统的发展历程和计算机硬件的发展历程是密切相关的。

LINUX内核进程高效通信机制研究

LINUX内核进程高效通信机制研究
8)
摘要 :进程 间的通信是 多任务 、多用户操作 系统 必须考虑 的重 大问题 ,L u i x继承 了 U i的基本设计 思想,其 n n x 安全性和稳定性得到 了人们 的认 可,但 随着其应用领 域的不断拓展 ,其通信机制 已经不能满足用 户的 需求。本 文在
分析 Ln x内核进程 通信机制 的基础上 ,就如何提 高 Ln x内核进程 间的通信效能进行 了研 究。 iu iu 关键词 : Ln x操作 系统 ;内核进程 ;高效通信息 ;优化措施 iu
中图分 类号:T 31 2 P 1. 5

文献标识码 :A 文章编号 :10- 59( 1) 8 0 1- 2 07 99 2 2 0- 18 0 0
引言 程之间是分离的任务 , 各个进程有着 自己的权利和责任, 何 任 L n x 是一种 可运行 于多种平 台的,源代码公 开的 多任 iu 个进程崩溃 了,不应该影响到其它进程导致其它进程崩溃 , 每个独立 的进程都运行在 自己的虚拟地址空 间之 中。 务、多用户操 作系统,Ln x继承 了 U i iu n x的基 本设计 思想 , 在安全性 和稳定性方面得到了大量使用者的认可, 于这种 多 对 三 、L u x内核进程通信手段分类 i n L n x 内核进程通信 所采用 的通 信机制 ,基本上 是延用 iu 任 务、多用户 的操 作系统,其 内核进程 间的通信 可以说是整个 系统的核心要素 , 是保证 其它子系统能获得 相应 的系统资源得 U I N X平台所采 用的进程通信机制 ,其 中,A & T T的 贝尔实验室 以正常运行的根本 。 近年来 , 随着 L n x系统的应用领域的不 和 加州大学伯 克利分校 的伯 克利软件发 布中心在进程 通信机 iu 断拓展 , 基于 L n x系统的应用软件不断增多 , iu 使得系统负荷 制方面 的侧 重点并不相同,贝尔实验 室在对 U I N X早期进程 间 不断加重 , 虽然 L n x操作系统提供 了多种进程通信机制 , iu 但 通 信手段改进和扩充的基 础上,形成了 “ y t m V P ”通信 S s e I C 这些通信机制在承担大容量数据传输时效率较差 , 已经不能满 机制,该通信机制将通信进程局 限于单个计 算机 内,而伯 克利 足用户 日益增长 的需求 , 如何针对 L n x系统进程通信机制 的 软件发布中心则跳过了单个计算机 的限制,形成 了 S c e iu o k t进 L nx在继承两者 的基础上 , 提供 了管道 、 号、 信 不足进行 改进 , 立高速有 效的通信机制 , 为 L n x系统应 程通信机制 。 iu 建 成 iu 跟踪 、命名管道、报 文、共享 内存、信号量 以及插 口等通信手 用所必须 关注 的问题 。下面 , 本文在分析 L n x内核进程通信 iu 机制 的基础 上, 就如何提 高 L n x内核进程 间的通信效 能进行 段 。其中 ,管道、信号 、跟踪通信手段属于 “ y tm V P ” iu S s e IC 探 讨。 通信机制 ,而其余几种通信手段则属于 S c e 通 信机 制。 o kt 二 、L nX内核 结 构 组 成 iU 管道 通信机制 是通 过在父子 进程间或者 兄弟进程 间通过 进 程实质上就是处于执行状态的程序, 并不仅 限于 程序 系统 调用建立一个 单 向的通信 管道来实现进 程通信 的通信机 但 代 码,通常还包括其它 资源如打 开的文件 、处理器状态 、地址 制 。 这种管道路是 由父进程所建立的 , 对子进程 来说 是静 态的 , 空间、存放全局变量的数据段等。L n x系统下的进 程应 当包 是采用先入先 出的原则来进行进程 间内容 的传递 , iu 其每个 管道 含一段可执行程序 、专用 的系统堆栈空间、进程控制块 、独立 都是 单向的,因此要实现双 向通信就需要建立两个 管道。信号 的存储空间几个要素 。L n x建立这种基于多用户、多任务的 通信机制严格 的来说并不是 为进程 间通信而设 置的, 也用 于 iu 但 大型应用系统 ,主要是倾向于通过大型、复杂 、孤立的进程来 进程 间的通信 ,这种通信机制更多 的偏 向于 “ 中断 ” 机制 的软 提供应用功 能, 了真正实现 多任务 、 为 多用户应用环境 , iu 件模拟 ,一般将信 号发送者作 为中断源 ,接 受者作为处理器 , Lnx 充分利用 了任务切换机制 , 从而有效 的降低 了对硬件配置的要 采 用 发送 中 断 请求 的 方式 来 实现 通 信 。跟 踪 是通 过 调 用 求, 并支持多种处理器芯片 , 但严格来说 L n x并不是实时操 p r cO 读写其它子进程地址空间中的 内容的方法 , 来实现 iu tae 作系统 , 因此要提高其实时性能 , 必须从其进 程调度策 略入 手, 跟踪子进 程执行的 目的。这几类进 程通 信机制,都只能应用于 提 高其通信效能 ,从 而改进其 实时 陛。 父进程和子进 程之间,或者兄弟进 程之 间,在发送信号时需要 L n x内核主要分为进程调度 、 iu 内存管理 、 拟文 件系统、 对方的 P D 整个通信 管道对于 子进程来 说是 静态的, 向的, 虚 I, 单 网络接 口、进程 间通信 五个子 系统 。进程 调度控制进程对 C U 在实际使用中通常还需要在建立动态通信管道来辅助通信 。 P 的访 问,当需要进行下一个进程 时, 进程设度程序 即依据需求 命名管道是采用 F F I O文件 的形式存在于文件系统之 中, 选择最值得运行 的进程 。可运特进程 则是等 待 C U资源程 , P 当进程间需要通信时,通过使用其文件名来打开管道 , 因此管 L n x所采 用 的进程 调度算 法是这种基 于优先级 的简单 的算 道的使用不再局限于近亲进程之间 。 iu 报文队列通信机制是通过 法。 在五个子 系统 之间关系十分密切 , 进程调度承担控制与沟 系统调用设立一个报文 队列 , 进程通过系统调用 向该 队列发送 通 的作 用,当存在 多个 程序 时, 程序要获取 C U资源运行就 必 消 息或从队列 中接 收消息 ,以报 文传递 的形式来 实现 进程通 P 须 为该程序创 建进程 , 而创建进程首先就 必须将程序和相关数 信 。 共享 内在是通过系统调用为进程设立共享 内存 区, 其它进 据 写入 内存 之中。进程 间的通信 主要依靠内存 管理来进 行,依 程通过系统调用将 该内存 区映射 到用户地址空 间中, 即可像正 靠共 享内存通信机制, 允许 两个 进程 除了拥有 自己的私 有内存 常内存访 问一样读 写该共享 内存 区。 虽然共享 内存通信机制快 外 , 可以存 取共 同的内存区域。虚拟文件子系统是利用网络 速有 效, 还 但共享 内存通信机制不像其它通信机制那样 能够在 写 接 口支持 网络文件 的系 统 ,该系 统也 同样依靠 内存管理 的支 入后就立 即唤醒睡 眠等待 中的进程 , 因此需要与其它通信机制 持 ,来实现虚拟 文件系统的进程交换, 程的交换 由调度程 序 相配合使用 。 进 来 定期进 行调度 ,因此 内存管理需要依赖于进程调度 。 四、进 程通信 机制对 比分析 可 以看 出,在 L n x内核五个子系统中 , iu 进程调度子系统 采用 管道 通信 机制 , 父进 程与子进 程之间 , 或者兄弟进程 是整个 内核其它系统顺利工作 的关键部分 , 无论是文件 系统进 这类 近亲进程 之间, 可 以通过系 统调 用建 立一个简单的通信 程 还是网络服务进程 , 都依靠进 程调度来获取 C U资源 才能正 管道 , P 但这类通 信管道只能 由父进程建立 , 管道两端的进程都 常运行。虽然 L nx是多用户 、多任务操作系统 ,但其多个进 iu ( 下转第 15页 ) 1

linux操作系统(论文)

linux操作系统(论文)

Linux操作系统1. 引言Linux操作系统是一种开源的、免费的操作系统,具有稳定性、高性能和安全性等优点,因此在计算机领域得到广泛应用。

本文将着重介绍Linux操作系统的历史、特点、架构以及在实际应用中的优势。

2. 历史2.1 Unix操作系统的起源Linux操作系统起源于Unix操作系统,Unix操作系统由Ken Thompson和Dennis Ritchie在20世纪70年代初开发。

Unix操作系统成为了多用户、多任务操作系统的鼻祖,为后来的操作系统提供了参考和灵感。

2.2 Linux的开发与诞生Linux操作系统的开发始于1991年,当时Linus Torvalds在芬兰赫尔辛基大学上学时开始对自己的个人计算机编写一个操作系统内核。

他将自己的操作系统命名为Linux,并在全球范围内开放源代码,吸引了大量开发者对其进行改进和贡献。

2.3 Linux的发展与应用随着Linux的不断发展,越来越多的人开始使用和推崇Linux操作系统。

Linux操作系统广泛应用于服务器、嵌入式系统、超级计算机等领域,在互联网时代的推动下,Linux形成了一个强大的生态系统。

3. 特点Linux操作系统具有以下主要特点:3.1 开源和免费Linux操作系统是开源的,用户可以自由获取、使用和修改其源代码。

这使得用户能够根据自己的需求对系统进行定制和优化,同时也使得Linux操作系统成为了一种免费的选择。

3.2 稳定性与可靠性由于开源特性和全球开发者的共同努力,Linux操作系统具有出色的稳定性和可靠性。

相比其他操作系统,Linux在长时间运行和高负载情况下表现更好,稳定性得到了业界的广泛认可。

3.3 高度可定制化Linux操作系统提供了丰富的命令行工具和配置选项,使得用户可以根据自己的需要对系统进行高度定制。

这种可定制性使得Linux操作系统适用于各种不同的场景和应用。

3.4 安全性由于开放源代码和许多安全性功能的内置,Linux操作系统被认为是相对较安全的操作系统之一。

Linux内核编译及常见错误实验报告

Linux内核编译及常见错误实验报告

***学生实验报告一、实验目的(1)学习重新编译Linux内核的方法(2)理解Linux标准内核和发行版本内核的区别。

二、实验内容在Linux系统中下载同一发行版本的版本号较高的内核,编译之后运行自己编译的内核,并使用uname-r命令查看是否运行成功。

由于不同版本的内核在编译过程中可能出现不同的问题,本书推荐的内核版本为4.16.10。

从第7章开始的进阶实验篇,都可以选用该版本的内核。

三、实验设备Vmware上运行的linux ubuntu 5.11.0-43-generic实验成功:linux ubuntu 4.18.0-generic(Ubuntu18.04均可)实验成功的方法在最后四、实验过程和原理分析一、实验(一)准备工作:在这里我建议用一个全新的虚拟机,避免编译错误对原来常使用的虚拟机造成不可逆的影响,安装好后就先安装gcc、make等工具首先下载好Linux***内核文件解压至/usr/src 目录下,如下:确认安装好gcc、make等工具,后可直接运行命令sudo make menuconfig进行查看内核功能是否需要编译,如果遇到如下错误可以运行命令sudo apt bison 或sudo apt-get install fiex bison命令解决错误:解决:(不建议)(强烈建议)除此之外还可以直接运行,上一条命令解决不了就用下面这个:sudo apt-get install --reinstall bison libbison-dev flex libfl-dev解决上述错误(强烈建议)运行完上述命令后再次输入sudo make menuconfig便正常进入如下:见到这个界面后无需任何多余操作,使用键盘方向键选择<Save>回车再回车即可此时.config文件生成成功.config文件是隐藏文件记得加参数-a此外还有一个方法就是用cp 命令从原有系统的内核复制.config文件过来也可以命令:sudo cp /boot/config- 5.11.0-43-generic ./.config(二)编译内核为了避免多线程编译时同时出现过多错误,我们这里一开始只使用单线程编译在这里除了用make编译还可以用make-kpkg等工具,个人比较喜欢用make-kpkg但课本用make所以我接下来的实验也先用make完成。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux内核研究1.Linux内核体系结构1.1.linux内核的作用一个完整的操作系统主要由四部分组成,即硬件、操作系统内核、操作系统应用和用户应用程序,如图1.1所示。

图1.1Linux内核的作用就是为了用户应用程序与计算机硬件进行交互,实现对硬件部件的编程控制和接口操作,调度对硬件资源的访问,从而实现纷繁复杂的功能。

1.2.liunx的组成结构Linux内核主要由五个模块组成,他们分别是:进程调度模块、内存管理模块、文件系统模块、进程间通信模块和网络接口模块。

这五个模块之间的关系如图1.2:图1.2进程调度(SCHED)控制着进程对CPU的访问。

当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。

可运行进程实际是仅等待 CPU 资源的进程,如果某个进程在等待其他资源,则该进程是不可运行进程。

Linux 使用了比较简单的基于优先级的进程调度算法选择新的进程。

内存管理(MM)允许多个进程安全地共享主内存区域。

Linux的内存管理支持虚拟内存,即在计算机中运行的程序,其代码、数据和堆栈的总量可以超过实际内存的大小,操作系统只将当前使用的程序块保留在内存中,其余的程序块则保留在磁盘上。

必要时,操作系统负责在磁盘和内存之间交换程序块。

内存管理从逻辑上可以分为硬件无关的部分和硬件相关的部分。

硬件无关的部分提供了进程的映射和虚拟内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。

虚拟文件系统(Virtul File System VFS)隐藏了各种不同硬件的具体细节,为所有设备提供了统一的接口,VFS还支持多达数十种不同的文件系统,这也是Linux较有特色的一部分。

虚拟文件系统可分为逻辑文件系统和设备驱动程序。

逻辑文件系统指Linux所支持的文件系统,如ext2, fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。

网络接口(NET)提供了对各种网络标准协议的存取和各种网络硬件的支持。

网络接口可分为网络协议和网络驱动程序两部分。

网络协议部分负责实现每一种可能的网络传输协议,网络设备驱动程序负责与硬件设备进行通信,每一种可能的硬件设备都有相应的设备驱动程序。

进程间通信(IPC) 支持进程间各种通信机制。

从图1.2图1.2可以看出,处于中心位置的是进程调度,所有其它的子系统都依赖于它,因为每个子系统都需要挂起或恢复进程。

一般情况下,当一个进程等待硬件操作完成时,它被挂起;当操作真正完成时,进程被恢复执行。

例如,当一个进程通过网络发送一条消息时,网络接口需要挂起发送进程,直到硬件成功地完成消息的发送,当消息被发送出去以后,网络接口给进程返回一个代码,表示操作的成功或失败。

其它子系统(内存管理,虚拟文件系统及进程间通信)以相似的理由依赖于进程调度。

各个子系统之间的依赖关系如下:·进程调度与内存管理之间的关系:这两个子系统互相依赖。

在多道程序环境下,程序要运行必须为之创建进程,而创建进程的第一件事,就是要将程序和数据装入内存。

·进程间通信与内存管理的关系:进程间通信子系统要依赖内存管理支持共享内存通信机制,这种机制允许两个进程除了拥有自己的私有内存,还可存取共同的内存区域。

·虚拟文件系统与网络接口之间的关系:虚拟文件系统利用网络接口支持网络文件系统(NFS),也利用内存管理支持RAMDISK 设备。

·内存管理与虚拟文件系统之间的关系:内存管理利用虚拟文件系统支持交换,交换进程(swapd)定期地由调度程序调度,这也是内存管理依赖于进程调度的唯一原因。

当一个进程存取的内存映射被换出时,内存管理向文件系统发出请求,同时,挂起当前正在运行的进程。

除了图1.2所显示的依赖关系以外,内核中的所有子系统还要依赖一些共同的资源,但在图中并没有显示出来。

这些资源包括所有子系统都用到的过程,例如,分配和释放内存空间的过程,打印警告或错误信息的过程,还有系统的调试例程等等。

随后章节将重点研究这五大模块。

2.进程调度模块2.1.进程的概念首先我们对进程作一明确定义:所谓进程是由正文段(text)、用户数据段(user segment)以及系统数据段(system segment)共同组成的一个执行环境。

图3程序装入内存后就可以运行了:在指令指针寄存器的控制下,不断的将指令取至CPU运行。

这些指令控制的对象不外乎各种存储器(内存、外存和各种CPU寄存器等),这些存储器中保存有待运行的指令和待处理的数据,当然,指令只有得到CPU才能发挥其作用。

可见,在计算机内部,程序的执行过程实际上就是一个执行环境的总和,这个执行环境包括程序中各种指令和数据,还有一些额外数据,比如说寄存器的值、用来保存临时数据(例如传递给某个函数的参数、函数的返回地址、保存变量等)的堆栈(包括程序堆栈和系统堆栈)、被打开文件的数量及输入输出设备的状态等等。

这个执行环境的动态变化表征程序的运行。

我们就把这个环境称作“进程”,它代表程序的执行过程,是一个动态的实体,它随着程序中指令的执行而不断地变化。

在某个特定时刻的进程的内容被称为进程映象(process image)。

Linux是一个多任务操作系统,也就是说,可以有多个程序同时装入内存并运行,操作系统为每个程序建立一个运行环境即创建进程,每个进程拥有自己的虚拟地址空间,它们之间互不干扰,即使要相互作用(例如多个进程合作完成某个工作),也要通过内核提供的进程间通信机制(IPC)。

Linux内核支持多个进程虚拟地并发执行,这是通过不断地保存和切换程序的运行环境而实现的,选择哪个进程运行是由调度程序决定的。

注意,在一些UNIX 书籍中,又把“进程切换”(Process Switching)称为“环境切换”或“上下文切换”(Context Switching),这些术语表达的意思是相同的。

进程运行过程中,还需要其他的一些系统资源,例如,要用CPU来运行它的指令、要用系统的物理内存来容纳进程本身和它的有关数据、要在文件系统中打开和使用文件、并且可能直接或间接的使用系统的物理设备,例如打印机、扫描仪等。

由于这些系统资源是由所有进程共享的,所以Linux必须监视进程和它所拥有的系统资源,使它们们可以公平地拥有系统资源以得到运行。

系统中最宝贵的资源是CPU,通常来说,系统中只有一个CPU,当然也可以有多个CPU (Linux支持SMP___对称多处理机)。

Linux作为多任务操作系统,其目的就是让CPU上一直都有进程在运行,以最大限度地利用这一宝贵资源。

通常情况下,进程数目是多于CPU数目的,这样其他进程必须等待CPU这一资源。

操作系统通过调度程序来选择下一个最应该运行的进程,并使用一系列的调度策略来确保公平和高效。

进程是一个动态实体,如图3所示,进程实体由三个独立的部分组成:(1)正文段(text):存放被执行的机器指令。

这个段是只读的(所以,在这里不能写自己能修改的代码),它允许系统中正在运行的两个或多个进程之间能够共享这一代码。

例如,有几个用户都在使用文本编辑器,在内存中仅需要该程序指令的一个副本,他们全都共享这一副本。

(2)用户数据段(user segment):存放进程在执行时直接进行操作的所有数据,包括进程使用的全部变量在内。

显然,这里包含的信息可以被改变。

虽然进程之间可以共享正文段,但是每个进程需要有它自己的专用用户数据段。

例如同时编辑文本的用户,虽然运行着同样的程序__编辑器,但是每个用户都有不同的数据:正在编辑的文本。

(3)系统数据段(system segment):该段有效地存放程序运行的环境。

事实上,这正是程序和进程的区别所在。

如前所述,程序是由一组指令和数据组成的静态事物,它们是进程最初使用的正文段和用户数据段。

作为动态事物,进程是正文段、用户数据段和系统数据段的信息的交叉综合体,其中系统数据段是进程实体最重要的一部分,之所以说它有效地存放程序运行的环境,是因为这一部分存放有进程的控制信息。

系统中有许多进程,操作系统要管理它们、调度它们运行,就是通过这些控制信息。

Linux为每个进程建立了task_struct数据结构来容纳这些控制信息。

总之,进程是一个程序完整的执行环境。

该环境是由正文段、用户数据段、系统数据段的信息交织在一起组成的。

2.2.Linux中的进程描述Linux中的每个进程由一个task_struct数据结构来描述,在Linux中,任务(task)、和进程(process)是两个相同的术语,task_struct其实就是通常所说的“进程控制块”即PCB。

task_struct容纳了一个进程的所有信息,是系统对进程进行控制的唯一手段,也是最有效的手段。

Linux支持多处理机(SMP),所以系统中允许有多个CPU, Linux作为多处理机操作系统时系统中允许的最大CPU个数为32。

很显然,Linux作为单机操作系统时,系统中只有一个CPU,这里主要讨论单处理机的情况。

和其他操作系统类似,Linux也支持两种进程:普通进程和实时进程。

实时进程具有一定程度上的紧迫性,要求对外部事件做出非常快的响应;而普通进程则没有这种限制。

所以,调度程序要区分对待这两种进程,通常,实时进程要比普通进程优先运行。

这两种进程的区分也反映在task_struct数据结构中了。

总之,包含进程所有信息的task_struct数据结构是比较庞大的,但是该数据结构本身并不复杂,我们将它的所有域按其功能可做如下划分:·进程状态(State)·进程调度信息(Scheduling Information)·各种标识符(Identifiers)·进程通信有关信息(IPC:Inter_Process Communication)·时间和定时器信息(Times and Timers)·进程链接信息(Links)·文件系统信息(File System)·虚拟内存信息(Virtual Memory)·页面管理信息(page)·对称多处理器(SMP)信息·和处理器相关的环境(上下文)信息(Processor Specific Context)·其它信息下面我们对task_struct结构进行具体描述。

2.3.task_struct结构描述2.3.1.进程状态(State)进程执行时,它会根据具体情况改变状态。

进程状态是调度和对换的依据。

Linux中的进程主要有如下状态,如表4所示。

表4处于这种状态的进程,要么正在运行、要么正准备运行。

正在运行的进程就是当前进程(由current所指向的进程),而准备运行的进程只要得到CPU就可以立即投入运行,CPU是这些进程唯一等待的系统资源。

相关文档
最新文档