linux进程管理
- 格式:pdf
- 大小:241.00 KB
- 文档页数:38


软 件 学 院
上 机 实 验 报 告
课程名称: 操作系统
实验项目: 实验一:Linux环境下进程管理
实 验 室: 耘慧402
姓 名: 学 号:
专业班级: 实验时间:
实验成绩 评阅教师
一、 实验目的及要求
1. 加深对进程概念的理解,明确进程和程序的区别;
2. 进一步认识并发执行的实质;
3. 分析进程争用资源的现象,学习解决进程互斥的方法;
4. 了解Linux系统中进程通信的基本原理;
二、 实验性质
1. 进程的创建:编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察记录屏幕上的显示结果,并分析原因。
2. 进程的控制:修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。如果在程序中使用系统调用lockf()来给每一个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。
3. 用fork( )创建一个进程,再调用exec( )用新的程序替换该子进程的容;利用wait( )来控制进程执行顺序。
三、 实验学时
实验性质: 验证性
实验学时: 4学时
实验要求: 必做
四、 实验环境
1.实验环境: Linux系统开发环境 2.知识准备:
(1) Linux系统开发环境搭建;
(2) Linux环境下GCC编译器的使用;
(3)语言中函数定义与调用、指针和类型的定义与使用、结构的定义、动态存的申请等预备知识。
Linux0.11的地址
有3类地址需要区分清楚:
1. 程序(进程)的虚拟地址和逻辑地址
虚拟地址(virtual address)指程序产生的有段选择符和段内偏移两部分组成的地址。一个程序的虚拟地址空间有GDT映射的全地址空间和LDT映射的局部地址空间组成。
逻辑地址(logical address)指程序产生的段内偏移地址。应用程序只与逻辑地址打交道,分段分页对应用程序来说是透明的。也就是说C语言中的&,汇编语言中的符号地址,C中嵌入式汇编的”m”对应的都是逻辑地址。
2. CPU的线性地址
线性地址(linear address)是逻辑地址到物理地址变换的中间层,是处理器可寻址空间的地址。程序代码产生的逻辑地址加上段基地址就产生了线性地址。
3. 实际物理内存地址
物理地址(physical address)是CPU外部地址总线上的寻址信号,是地址变换的最终结果,一个物理地址始终对应实际内存中的一个存储单元。对80386保护模式来说,如果开启分页机制,线性地址经过页变换产生物理地址。如果没有开启分页机制,线性地址直接对应物理地址。页目录表项、页表项对应都是物理地址。
Linux 0.11的内核数据段,内核代码段基地址都是0,所以对内核来说,逻辑地址就是线性地址。又因为1个页目录表和4个页表完全映射16M物理内存,所以线性地址也就是物理地址。故对linux0.11内核来说,逻辑地址,线性地址,物理地址重合。
个人总结:
分段和分页的区别:
分段可以给每个进程提供不同的线性地址
分页可以把同一线性地址空间映射到不同的物理地址
逻辑地址:
线性地址:
物理地址:
逻辑地址-》分段单元-》线性地址-》分页单元-》物理地址
Linux在使用的时候避开了Intel原先的设计意图,只是对段基址设置了0,这样逻辑地址和线性地址就一样了,再经过分页机制,就最后变成了物理地址了。
Linux2.4内核使用的空间中,虚拟地址和物理地址只是简单的相差了3G
操作系统实验报告
题目:管理Linux 系统进程
实验目的
1) 回顾系统进程的概念,加深对Linux / UNIX 进程管理的理解。
2) 回顾ps 命令和选项。
3) 列出当前shell 中的进程。
4) 列出运行在系统中的所有进程。
5) 根据命令名搜索特定的进程。
6) 确定一个进程,终止它。
7) 使用kill 命令终止进程。
8) 根据用户查找和终止进程。
9) 根据命令名终止进程。
实验环境
一台运行Red Hat Linux 操作系统的计算机。
实验内容与步骤
注:本报告中蓝色字表示填空的内容,红色字表示仍然在纠结。
步骤 1:登录进入GNOME。
在 Linux 登录框中填写指导老师分配的用户名和口令,登录Linux 系统。
步骤 2:访问命令行。
单击红帽子,在“GNOME 帮助”菜单中单击“系统工具”-“终端”命令,打开“终
端”窗口。
步骤3:回顾系统进程概念。
每个运行的程序都会创建一个进程,进程分配到一个唯一的进程标识符 (PID) 。PID
被系统用于标识和跟踪进程,直到进程结束。操作系统内核管理所有进程的初始化和终止。
每一个进程都要求系统资源 (例如CPU 时间和RAM空间)
在其中工作。当进程启动的时候,
操作系统把系统资源分配给每个进程,当进程终止的时候,系统回收这些资源。在Linux 系
统启动的时候,首先启动的两个进程是sched (调度) 和init
(初始化) ,它们管理着其他进程。
Linux 系统中有几种不同类型的进程:
守护进程:由 Linux 内核启动的进程,为了特定目的而存在。例如,lpsched 守护进程
存在只是为了处理打印作业。
父进程:派生其他进程的进程是父进程。一个叫做init 的守护进程是第一个调用的进程。
每一个进程,除了init 之外,都有一个父进程。
子进程:由其他进程派生出来的进程叫做子进程。
孤儿进程:在进程返回输出之前,它的父进程结束了,这样的进程叫做孤儿进程。
在Linux中,`kthreadd` 是一个特殊的内核线程,它的主要作用是管理其他内核线程。具体来说,`kthreadd` 负责创建、调度和销毁内核线程。
以下是 `kthreadd` 的主要功能:
1. **创建内核线程**:当系统需要一个新的内核线程时,例如当某个系统调用或内核操作需要异步执行时,`kthreadd` 会被调用以创建新的内核线程。
2. **调度内核线程**:`kthreadd` 负责调度内核线程的执行。它会根据线程的优先级和其他调度参数来决定哪个线程应该在下一个时间片内执行。
3. **销毁内核线程**:当某个内核线程不再需要时,`kthreadd` 会负责销毁它。这包括释放线程的资源,并将其从调度队列中移除。
需要注意的是,`kthreadd` 自身也是一个内核线程。这意味着它是由另一个更高层的进程或内核线程创建和调度的。通常,这个高层级的进程是系统初始化过程中的一部分,或者是由于某种需要而被调度的(例如,当一个用户空间进程通过系统调用请求内核执行某些任务时)。
总之,`kthreadd` 是Linux内核中的一个重要组件,它负责管理
其他内核线程的创建、调度和销毁,从而确保系统的正常运行。