Linux内核体系结构-1
- 格式:pdf
- 大小:624.38 KB
- 文档页数:15
《网络服务器搭建、配置与管理-Linux版(第3版)》课后习题答案1.11 练习题一、填空题1.GNU的含义是。
2.Linux一般有3个主要部分:、、。
3.目前被称为纯种的UNIX指的就是以及这两套操作系统。
4.Linux是基于的软件模式进行发布的,它是GNU项目制定的通用公共许可证,英文是。
5.史托曼成立了自由软件基金会,它的英文是。
6.POSIX是的缩写,重点在规范核心与应用程序之间的接口,这是由美国电气与电子工程师学会(IEEE)所发布的一项标准。
7.当前的Linux常见的应用可分为与两个方面。
8.Linux的版本分为和两种。
9.安装Linux最少需要两个分区,分别是。
10.Linux默认的系统管理员账号是。
1. GNU's Not Unix的递归缩写2. 内核(kernel)、命令解释层(Shell或其他操作环境)、实用工具3. System V BSD4. Copyleft(无版权)General Public License,GPL)5. FSF,Free Software Foundation6. 便携式操作系统接口(Portable Operating System Interface)7. 企业应用个人应用8. 内核版本发行版本9. swap交换分区/(根)分区10. root二、选择题1.Linux最早是由计算机爱好者()开发的。
A.Richard Petersen B.Linus TorvaldsC.Rob Pick D.Linux Sarwar2.下列中()是自由软件。
A.Windows XP B.UNIX C.Linux D.Windows 2008 3.下列中()不是Linux的特点。
A.多任务B.单用户C.设备独立性D.开放性4.Linux的内核版本2.3.20是()的版本。
A.不稳定B.稳定的C.第三次修订D.第二次修订5.Linux安装过程中的硬盘分区工具是()。
linux操作系统的结构及详细说明linux的操作系统的结构你了解多少呢?下面由店铺为大家整理了linux操作系统的结构及详细说明的相关知识,希望对大家有帮助!linux操作系统的结构及详细说明:一、 linux内核内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。
Linux 内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。
系统调用接口:SCI 层提供了某些机制执行从用户空间到内核的函数调用。
这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。
SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务。
在 ./linux/kernel 中您可以找到 SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的部分。
1. 内存管理对任何一台计算机而言,其内存以及其它资源都是有限的。
为了让有限的物理内存满足应用程序对内存的大需求量,Linux 采用了称为“虚拟内存”的内存管理方式。
Linux 将内存划分为容易处理的“内存页”(对于大部分体系结构来说都是 4KB)。
Linux 包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。
不过内存管理要管理的可不止 4KB 缓冲区。
Linux 提供了对 4KB 缓冲区的抽象,例如 slab 分配器。
这种内存管理模式使用 4KB 缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。
这样就允许该模式根据系统需要来动态调整内存使用。
为了支持多个用户使用内存,有时会出现可用内存被消耗光的情况。
由于这个原因,页面可以移出内存并放入磁盘中。
这个过程称为交换,因为页面会被从内存交换到硬盘上。
内存管理的源代码可以在 ./linux/mm 中找到。
2 .进程管理进程实际是某特定应用程序的一个运行实体。
linux操作系统体系结构Linux操作系统采用了一种模块化的设计,它的体系结构可以分为用户空间和内核空间两个部分。
用户空间提供了用户与操作系统之间的接口,而内核空间则负责管理系统的资源和提供各种功能的实现。
内核空间是Linux操作系统的核心,它负责管理计算机的硬件资源、处理系统的中断和异常,并为用户空间提供各种系统调用的接口。
Linux的内核是一个可靠、高效、可扩展的设计,它能够运行在多种硬件平台上。
内核包括了许多模块,每个模块负责实现一个特定的功能,比如进程管理、内存管理、文件系统等。
进程管理是Linux内核的一个关键功能,它负责创建、调度和销毁进程,并为进程之间提供通信和同步机制。
Linux采用了基于时间片的多任务调度算法,使得多个进程可以共享处理器资源,提高系统的并发性能。
而且,Linux内核还支持多线程,使得一个进程可以创建多个线程并在多个处理器上同时执行,充分发挥多核处理器的性能。
内存管理是Linux内核的另一个重要功能,它负责分配和管理系统的物理内存和虚拟内存。
Linux采用了页式存储管理机制,将物理内存划分为固定大小的页面,每个页面可以映射到不同的虚拟地址空间。
这样就可以实现进程之间的内存隔离和共享,同时还提供了一些高级的内存管理功能,比如动态内存分配和内存回收。
文件系统是Linux内核的另一个重要组成部分,它负责管理文件和目录,并提供了对这些文件和目录的访问接口。
Linux支持多种文件系统,包括Ext4、XFS、Btrfs等。
文件系统还提供了一些高级功能,比如权限管理、元数据缓存和文件系统日志等。
除了上述功能之外,Linux还提供了许多其他的功能模块,比如网络协议栈、设备驱动程序、虚拟化和容器等。
这些功能模块使得Linux 成为一个功能丰富、可定制性强的操作系统。
用户空间位于内核空间之上,它提供了用户与操作系统之间的接口。
用户空间包含了一系列的应用程序和库,这些程序和库通过系统调用与内核进行通信。
linux体系结构linux体系结构从⼤⾯上来说,linux体系结构分为:⽤户空间:C库、⽤户应⽤程序内核空间:系统调⽤接⼝、内核、硬件平台依赖代码具体来讲,linux可划分为5个部分:linux内核、GNU⼯具链、桌⾯环境、应⽤软件linux内核系统调⽤接⼝(SCI层):给应⽤⽤户提供⼀套标准的系统调⽤函数,上层⽤户可以通过这⼀套标准接⼝来访问底层内存管理:进程管理:⽂件管理:设备驱动管理:内存管理1.作⽤:管理物理内存、创建和管理虚拟内存为了使有限的物理内存满⾜应⽤程序对内存的需求,linux采⽤“虚拟内存”的内存管理⽅式实现,实现原理:交换空间:内核在硬盘上化⼀段存储空间来实现虚拟内存,这段存储空间称为“交换空间”页⾯:内存存储单元被分割成很多块,称为“页⾯”页⾯内存表:内核会维护⼀张表,来指明哪些页⾯位于物理内存,那么页⾯位于交换空间换出:物理内存---->交换空间换⼊:交换空间---->物理内存⼯作过程:1、内核将程序运⾏⽤到的页⾯就放到内存⾥,暂时不⽤就放到交换空间中(换出)。
2、当⽤到交换空间的页⾯时,就把它们调到内存中(换⼊),然后把物理内存其他⽤不到的页⾯换出到交换空间。
查看内存#cat /proc/meminfoMemTotal: 1035244 kB #物理内存1GMemFree: 786616 kB #空闲内存700M左右...SwapTotal: 2096472 kB #有2G的交换空间....查看内存使⽤情况#freetotal used free shared buffers cachedMem: 502360 489964 12396 0 53852 283372-/+ buffers/cache: 152740 349620Swap: 1015800 0 1015800共享内存页⾯:创建⼀写共享内存页⾯,⽤于多个进程共享使⽤。
#ipcs -m #查看共享内存页⾯key shmid owner perms bytes nattch status0x00000000 0 rich 600 52228 6 dest#owner:共享内存段的所有者#perms:权限进程管理参见⽂件管理linux内核⽂件管理采⽤虚拟⽂件系统(VFS),隐藏各种⽂件系统的具体细节,为⽂件操作提供统⼀的接⼝。
linux分层设计体系结构Linux分层设计体系结构是一种将Linux操作系统的各个组件和功能分层组织的方式,以实现模块化设计、可维护性和可扩展性。
以下是Linux分层设计体系结构的主要层级:1. 用户接口层:这是用户与Linux系统交互的界面层,包括Shell、命令行工具和图形用户界面。
用户通过这一层来执行操作系统的命令和访问系统资源。
2. 系统调用接口层:这一层提供给应用程序访问Linux内核所提供的功能的接口。
它包括一系列的系统调用(system call),应用程序可以通过这些系统调用来请求内核执行某些操作,例如文件操作、进程控制等。
3. 库函数层:这一层提供了一系列的函数库,供应用程序调用。
这些函数库封装了一些常用的操作,如字符串操作、文件操作、网络操作等。
应用程序通过调用这些函数库来实现特定的功能。
4. 内核层:这一层是操作系统的核心,负责管理和控制计算机的硬件资源,提供各种功能和服务。
Linux内核包含多个子系统,如进程管理、文件系统、网络协议栈、设备驱动等。
5. 设备驱动层:这一层负责与硬件设备进行交互,通过提供特定的接口和功能来控制和管理设备。
设备驱动层包括字符设备驱动、块设备驱动、网络设备驱动等。
6. 硬件层:这一层是真实的物理硬件,包括处理器、内存、外设等。
硬件层由设备驱动来访问和控制。
通过将Linux系统划分为不同的层次,分层设计体系结构提供了一种模块化的方式来开发、维护和扩展Linux系统。
每个层级都有明确定义的职责和接口,不同层级之间的依赖关系也得到了良好的管理。
这种设计使得Linux系统更加灵活、可维护和可扩展。
实例解析linux内核I2C体系结构(1)一、概述谈到在linux系统下编写I2C驱动,目前主要有两种方式,一种是把I2C设备当作一个普通的字符设备来处理,另一种是利用linux I2C驱动体系结构来完成。
下面比较下这两种驱动。
第一种方法的好处(对应第二种方法的劣势)有:●思路比较直接,不需要花时间去了解linux内核中复杂的I2C子系统的操作方法。
第一种方法问题(对应第二种方法的好处)有:●要求工程师不仅要对I2C设备的操作熟悉,而且要熟悉I2C的适配器操作;●要求工程师对I2C的设备器及I2C的设备操作方法都比较熟悉,最重要的是写出的程序可移植性差;●对内核的资源无法直接使用。
因为内核提供的所有I2C设备器及设备驱动都是基于I2C子系统的格式。
I2C适配器的操作简单还好,如果遇到复杂的I2C适配器(如:基于PCI的I2C适配器),工作量就会大很多。
本文针对的对象是熟悉I2C协议,并且想使用linux内核子系统的开发人员。
网络和一些书籍上有介绍I2C子系统的源码结构。
但发现很多开发人员看了这些文章后,还是不清楚自己究竟该做些什么。
究其原因还是没弄清楚I2C子系统为我们做了些什么,以及我们怎样利用I2C子系统。
本文首先要解决是如何利用现有内核支持的I2C适配器,完成对I2C设备的操作,然后再过度到适配器代码的编写。
本文主要从解决问题的角度去写,不会涉及特别详细的代码跟踪。
二、I2C设备驱动程序编写首先要明确适配器驱动的作用是让我们能够通过它发出符合I2C标准协议的时序。
在Linux内核源代码中的drivers/i2c/busses目录下包含着一些适配器的驱动。
如S3C2410的驱动i2c-s3c2410.c。
当适配器加载到内核后,接下来的工作就要针对具体的设备编写设备驱动了。
编写I2C设备驱动也有两种方法。
一种是利用系统给我们提供的i2c-dev.c来实现一个i2c 适配器的设备文件。
然后通过在应用层操作i2c适配器来控制i2c设备。
Linux系统结构(由里到外)硬件->Kernel(驱动程序)->Shell(终端、接口)->外层应用程序Linux中的目录结构存放命令的目录:/bin系统工具;/sbin系统管理员应用工具;/usr/bin和/usr/sbin存放用户应用程序;/usr/local/bin/boot内核及其他系统启动所需文件/opt安装大的应用程序/tmp临时文件/lost+found系统修复过程中恢复的文件/root超级用户的主目录/etc配置文件所在目录启动引导程序/etc/lilo.conf /etc/grub.conf 多系统引导时,可设置默认启动的系统等等控制启动模式/etc/fstab/etc/profile增加环境变量等(修改PA TH等)如配置JA V A/J2EE开发环境/etc/ftp*――ftp的配置文件/etc/httpd――web服务器的配置文件/etc/ssh*――ssh的配置文件(安全登陆)一、虚拟机上网配置1.PC机的设置在“网络邻居”的属性里,点“本地连接”属性,点“高级”选项,Internet连接共享全选,“家庭网络连接”选“Vmware Network Adapter Vmnet1”,此时的“Vmware Network Adapter Vmnet1”的IP地址变成192.168.0.1。
2.虚拟机设置安装虚拟机时,硬件设置“网络连接”为:仅主机。
“开始”“系统设置”“网络”,激活设备eth0,静态设置的IP地址:192.168.0.2;255.255.255.0;192.168.0.1,DNS:202.206.1.31;202.206.1.32。
打开浏览器就可以上网了。
(注意:必须关闭防火墙)二、通讯(挂载)配置1.配置NFS“开始”->“安全级别配置”,安全级别:无防火墙(不然无法用NFS mount它)。
“开始”->“系统设置”->“服务器设置”->“服务”,将iptables服务的勾去掉,选中nfs。
Linux内核0.11体系结构——《Linux内核完全注释》笔记打卡0 总体介绍⼀个完整的操作系统主要由4部分组成:硬件、操作系统内核、操作系统服务和⽤户应⽤程序,如图0.1所⽰。
操作系统内核程序主要⽤于对硬件资源的抽象和访问调度。
图0.1 操作系统组成部分内核的主要作⽤是为了与计算机硬件进⾏交互,实现对硬件部件的编程控制和接⼝操作,调度对硬件资源的访问,并为计算机上的⽤户程序提供⼀个⾼级的执⾏环境和对硬件的虚拟接⼝。
1 Linux内核模式操作系统内核的结构模式主要可分为整体式的单内核模式和层次是的微内核模式。
Linux 0.11采⽤了单内核模式。
如图1.2所⽰,单内核操作系统所提供的服务流程为:应⽤主程序使⽤指定的参数值执⾏系统调⽤指令(int x80),使CPU从⽤户态切换到核⼼态,然后操作系统根据具体的参数值调⽤特定的系统调⽤服务程序,这些服务程序根据需要再调⽤底层的⼀些⽀持函数以完成特定的功能。
完成服务后,系统使CPU从核⼼态回到⽤户态,执⾏后续的指令。
图1.1 单内核模式的简单模型结构2 Linux内核系统体系结构Linux内核主要由5个模块构成,分别为:进程调度模块、内存管理模块、⽂件系统模块、进程间通信模块和⽹络接⼝模块。
模块之间的依赖关系如图2.1所⽰,虚线部分表⽰0.11版本内核中未实现部分(所有的模块都与进程调度模块存在依赖关系)。
图2.1 Linux内核系统模块结构及相互依赖关系从单内核模式结构模型出发,Linux 0.11内核源代码的结构将内核主要模块分配如图2.2所⽰。
(除了硬件控制⽅框,其他粗线分别对应内核源代码的⽬录组织结构)图2.2 内核结构框图3 Linux内核对内存的管理和使⽤对于机器中的物理内存,Linux 0.11内核中,系统初始化阶段将其划分的功能区域如图3.1所⽰。
图3.1 物理内存使⽤的功能分布图虚拟地址:(virtual address)由程序产⽣的由段选择符合段内偏移地址两个部分组成的地址。
Linux内核体系结构本章首先概要介绍了Linux内核的编制模式和体系结构,然后详细描述了Linux内核源代码目录中组织形式以及子目录中各个代码文件的主要功能以及基本调用的层次关系。
接下来就直接切入正题,从内核源文件Linux/目录下的第一个文件Makefile开始,对每一行代码进行详细注释说明。
本章内容可以看作是对内核源代码的总结概述,可以作为阅读后续章节的参考信息。
一个完整可用的操作系统主要由4部分组成:硬件、操作系统内核、操作系统服务和用户应用程序,见图2-1所示。
用户应用程序是指那些字处理程序、Internet浏览器程序或用户自行编制的各种应用程序;操作系统服务程序是指那些向用户提供的服务被看作是操作系统部分功能的程序。
在Linux操作系统上,这些程序包括X窗口系统、shell命令解释系统以及那些内核编程接口等系统程序;操作系统内核程序即是本书所感兴趣的部分,它主要用于对硬件资源的抽象和访问调度。
Linux内核的主要用途就是为了与计算机硬件进行交互,实现对硬件部件的编程控制和接口操作,调度对硬件资源的访问,并为计算机上的用户程序提供一个高级的执行环境和对硬件的虚拟接口。
在本章内容中,我们首先基于Linux 0.11版的内核源代码,简明地描述Linux内核的基本体系结构、主要构成模块。
然后对源代码中出现的几个重要数据结构进行说明。
最后描述了构建Linux 0.11内核编译实验环境的方法。
1). Linux内核模式目前,操作系统内核的结构模式主要可分为整体式的单内核模式和层次式的微内核模式。
而本书所注释的Linux 0.11内核,则是采用了单内核模式。
单内核模式的主要优点是内核代码结构紧凑、执行速度快,不足之处主要是层次结构性不强。
在单内核模式的系统中,操作系统所提供服务的流程为:应用主程序使用指定的参数值执行系统调用指令(int x80),使CPU从用户态(User Mode)切换到核心态(Kernel Model),然后操作系统根据具体的参数值调用特定的系统调用服务程序,而这些服务程序则根据需要再底层的一些支持函数以完成特定的功能。
在完成了应用程序所要求的服务后,操作系统又从核心态切换回用户态,返回到应用程序中继续执行后面的指令。
因此概要地讲,单内核模式的内核也可粗略地分为三个层次:调用服务的主程序层、执行系统调用的服务层和支持系统调用的底层函数。
见图2-2所示。
2. Linux内核系统体系结构Linux内核主要由5个模块构成,它们分别是:进程调度模块、内存管理模块、文件系统模块、进程间通信模块和网络接口模块。
进程调度模块:用来负责控制进程对CPU资源的使用。
所采取的调度策略是各进程能够公平合理地访问CPU,同时保证内核能及时地执行硬件操作。
内存管理模块:用于确保所有进程能够安全地共享机器主内存区,同时,内存管理模块还支持虚拟内存管理方式,使得Linux支持进程使用比实际内存空间更多的内存容量。
并可以利用文件系统把暂时不用的内存数据块会被交换到外部存储设备上去,当需要时再交换回来。
文件系统模块:用于支持对外部设备的驱动和存储。
虚拟文件系统模块:通过向所有的外部存储设备提供一个通用的文件接口,隐藏了各种硬件设备的不同细节。
从而提供并支持与其它操作系统兼容的多种文件系统格式。
进程间通信模块子系统:用于支持多种进程间的信息交换方式。
网络接口模块:提供对多种网络通信标准的访问并支持许多网络硬件。
这几个模块之间的依赖关系见图2-3所示。
其中的连线代表它们之间的依赖关系,虚线和虚框部分表示Linux 0.11中还未实现的部分(从Linux 0.95版才开始逐步实现虚拟文件系统,而网络接口的支持到0.96版才有)。
由图可以看出,所有的模块都与进程调度模块存在依赖关系。
因为它们都需要依靠进程调度程序来挂起(暂停)或重新运行它们的进程。
通常,一个模块会在等待硬件操作期间被挂起,而在操作完成后才可继续运行。
例如,当一个进程试图将一数据块写到软盘上去时,软盘驱动程序就可能在启动软盘旋转期间将该进程置为挂起等待状态,而在软盘进入到正常转速后再使得该进程能继续运行。
另外3个模块也是由于类似的原因而与进程调度模块存在依赖关系。
其它几个依赖关系有些不太明显,但同样也很重要。
进程调度子系统需要使用内存管理器来调整一特定进程所使用的物理内存空间。
进程间通信子系统则需要依靠内存管理器来支持共享内存通信机制。
这种通信机制允许两个进程访问内存的同一个区域以进行进程间信息的交换。
虚拟文件系统也会使用网络接口来支持网络文件系统(NFS),同样也能使用内存管理子系统来提供内存虚拟盘(ramdisk)设备。
而内存管理子系统也会使用文件系统来支持内存数据块的交换操作。
若从单内核模式结构模型出发,我们还可以根据Linux 0.11内核源代码的结构将内核主要模块绘制成图2-4所示的框图结构。
其中内核级中的几个方框,除了硬件控制方框以外,其它粗线方框分别对应内核源代码的目录组织结构。
除了这些图中已经给出的依赖关系以外,所有这些模块还会依赖于内核中的通用资源。
这些资源包括内核所有子系统都会调用的内存分配和收回函数、打印警告或出错信息函数以及一些系统调试函数。
3.中断机制在使用80X86组成的PC机中,采用了两片8259A可编程中断控制芯片。
每片可以管理8个中断源。
通过多片的级联方式,能构成最多管理64个中断向量的系统。
在PC/AT系列兼容机中,使用了两片8259A芯片,共可管理15级中断向量。
其级连示意图见图2-5所示。
其中从芯片的INT引脚连接到主芯片的IR2引脚上。
主8259A芯片的端口基地址是0x20,从芯片是0xA0。
在总线控制器控制下,8259A芯片可以处于编程状态和操作状态。
编程状态是CPU使用IN或OUT指令对8259A芯片进行初始化编程的状态。
一旦完成了初始化编程,芯片即进入操作状态,此时芯片即可随时响应外部设备提出的中断请求(IRQ0–IRQ15)。
通过中断判优选择,芯片将选中当前最高优先级的中断请求作为中断服务对象,并通过CPU 引脚INT通知CPU外中断请求的到来,CPU响应后,芯片从数据总线D7-D0将编程设定的当前服务对象的中断号送出,CPU由此获取对应的中断向量值,并执行中断服务程序。
对于Linux内核来说,中断信号通常分为两类:硬件中断和软件中断(异常)。
每个中断是由0-255之间的一个数字来标识。
对于中断int0--int31(0x00--0x1f),每个中断的功能由Intel公司固定设定或保留用,属于软件中断,但Intel公司称之为异常。
因为这些中断是在CPU执行指令时探测到异常情况而引起的。
通常还可分为故障(Fault)和陷阱(traps)两类。
中断int32--int255(0x20--0xff)可以由用户自己设定。
在Linux系统中,则将int32--int47(0x20--0x2f)对应于8259A中断控制芯片发出的硬件中断请求信号IRQ0-IRQ15,并把程序编程发出的系统调用(system_call)中断设置为int128(0x80)。
4系统定时在Linux 0.11内核中,PC机的可编程定时芯片Intel 8253被设置成每隔10毫秒就发出一个时钟中断(IRQ0)信号。
这个时间节拍就是系统运行的脉搏,我们称之为1个系统滴答。
因此每经过1个滴答就会调用一次时钟中断处理程序(timer_interrupt)。
该处理程序主要用来通过jiffies变量来累计自系统启动以来经过的时钟滴答数。
每当发生一次时钟中断该值就增1。
然后从被中断程序的段选择符中取得当前特权级CPL作为参数调用do_timer()函数。
do_timer()函数则根据特权级对当前进程运行时间作累计。
如果CPL=0,则表示进程是运行在内核态时被中断,因此把进程的内核运行时间统计值stime增1,否则把进程用户态运行时间统计值增1。
如果程序添加过定时器,则对定时器链表进行处理。
若某个定时器时间到(递减后等于0),则调用该定时器的处理函数。
然后对当前进程运行时间进行处理,把当前进程运行时间片减1。
如果此时当前进程时间片并还大于0,表示其时间片还没有用完,于是就退出do_timer()继续运行当前进程。
如果此时进程时间片已经递减为0,表示该进程已经用完了此次使用CPU的时间片,于是程序就会根据被中断程序的级别来确定进一步处理的方法。
若被中断的当前进程是工作在用户态的(特权级别大于0),则do_timer()就会调用调度程序schedule()切换到其它进程去运行。
如果被中断的当前进程工作在内核态,也即在内核程序中运行时被中断,则do_timer()会立刻退出。
因此这样的处理方式决定了Linux系统在内核态运行时不会被调度程序切换。
内核态程序是不可抢占的,但当处于用户态程序中运行时则是可以被抢占的。
5. Linux进程控制程序是一个可执行的文件,而进程(process)是一个执行中的程序实例。
利用分时技术,在Linux操作系统上同时可以运行多个进程。
分时技术的基本原理是把CPU的运行时间划分成一个个规定长度的时间片,让每个进程在一个时间片内运行。
当进程的时间片用完时系统就利用调度程序切换到另一个进程去运行。
因此实际上对于具有单个CPU的机器来说某一时刻只能运行一个进程。
但由于每个进程运行的时间片很短(例如15个系统滴答=150毫秒),所以表面看来好象所有进程在同时运行着。
对于Linux 0.11内核来讲,系统最多可有64个进程同时存在。
除了第一个进程是“手工”建立以外,其余的都是进程使用系统调用fork创建的新进程,被创建的进程称为子进程(child process),创建者,则称为父进程(parent process)。
内核程序使用进程标识号(process ID,pid)来标识每个进程。
进程由可执行的指令代码、数据和堆栈区组成。
进程中的代码和数据部分分别对应一个执行文件中的代码段、数据段。
每个进程只能执行自己的代码和访问自己的数据及堆栈区。
进程之间相互之间的通信需要通过系统调用来进行。
对于只有一个CPU的系统,在某一时刻只能有一个进程正在运行。
内核通过调度程序分时调度各个进程运行。
Linux系统中,一个进程可以在内核态(kernel mode)或用户态(user mode)下执行,因此,Linux内核堆栈和用户堆栈是分开的。
用户堆栈用于进程在用户态下临时保存调用函数的参数、局部变量等数据。
内核堆栈则含有内核程序执行函数调用时的信息。
5.1任务数据结构内核程序通过进程表对进程进行管理,每个进程在进程表中占有一项。
在Linux系统中,进程表项是一个task_struct任务结构指针。
任务数据结构定义在头文件include/linux/sched.h中。