没有合适的资源?快使用搜索试试~ 我知道了~
首页进程管理及理解和增加Linux系统调用
进程管理及理解和增加Linux系统调用
5星 · 超过95%的资源 需积分: 9 26 下载量 72 浏览量
更新于2023-03-03
评论 4
收藏 157KB DOC 举报
本设计是专业基础课《操作系统》的课程设计。由于操作系统课的学时有限,没有安排实验。为了理论联系实际,加强分析问题、解决问题能力的培养,加强创新能力与探索精神、科学作风与综合素质的培养,加深理解和更好地掌握操作系统的基本概念、原理、技术和方法。特安排操作系统课程设计。它是操作系统课程的实践环节。由于具体的操作系统相当复杂,在短短的一周之内,不可能对所有管理系统进行详细地分析。因此,选择了操作系统中最重要的管理之一进程管理,作为本设计的任务。另外,为了使学生在使用系统调用的同时,进一步了解系统内部是如何实现系统调用的全过程,使学生在更深层次上对操作系统有所了解。
资源详情
资源评论
资源推荐
进程管理及理解和增加 Linux 系统调用
一.设计题目:进程管理及理解和增加 Linux 系统调用
二.设计时间和地点:时间为 2010 年 1 月 11 日—1 月 15 日;地点为软件学院基础实
验室一机房(B427)和软件实验室(B420)。
三.设计目的和要求:本设计是专业基础课《操作系统》的课程设计。由于操作系统
课的学时有限,没有安排实验。为了理论联系实际,加强分析问题、解决问题能力的
培养,加强创新能力与探索精神、科学作风与综合素质的培养,加深理解和更好地掌
握操作系统的基本概念、原理、技术和方法。特安排操作系统课程设计。它是操作系
统课程的实践环节。由于具体的操作系统相当复杂,在短短的一周之内,不可能对所
有管理系统进行详细地分析。因此,选择了操作系统中最重要的管理之一进程管理,
作为本设计的任务。另外,为了使学生在使用系统调用的同时,进一步了解系统内部
是如何实现系统调用的全过程,使学生在更深层次上对操作系统有所了解。
设计目的:
(1)加深对进程概念的理解,明确进程和程序的区别。
(2)进一步认识并发执行的实质。
(3)分析进程争用资源的现象,学习解决互斥的方法。
(4)了解 Linux 系统中进程通信的基本原理。
(5)弄清进程管理在操作系统中的地位和作用。
(6)初步揭开 Linux 内核的神秘“面纱”,为今后深入学习内核原理打下基础。
(7)弄清系统调用原理,以及操作系统在处理每个系统调用的时候,用户态怎样切入
核心态?又怎样从核心态返回到用户态的?
设计要求:
在具有自主版权的 Linux 环境下,用 c 语言或 c++,以及相关的系统调用,编程实现
进程的创建、控制、软中断通信、管道通信等功能。通过自己下载较新版本的 Linux 内
核源码,并解压缩、编译该内核源码,用编译出的内核重新引导系统。对于成功编译
和引导新内核成功的同学,添加一个新的系统调用,经重新编译和运行内核,使新的
系统调用可用。在用户态的程序中使用增加的系统调用,以证明它确实可用。
四设计内容
4.1 进程的创建
编写一段程序,使用系统调用 fork()创建两个子进程。当此程序运行时,在系统中
有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示
“A;子进程分别显示字符“b和“c。试观察记录屏幕上的显示结果,并分析原因。
4.1.1 参考程序
#include<stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{pid_t p1,p2;
p1=fork(); /*创建子进程 p1*/
if(p1<0)
printf("error in fork 1!"); /*子进程 p1 创建失败*/
else if (p1 == 0)
1
printf("b\n");
else
{
p2=fork(); /*创建子进程 p2*/
if(p2<0)
printf("error in fork 2!\n"); /*子进程 p2 创建失败*/
else if (p2 == 0)
printf(" c\n");
else
printf(" A\n");
}
return 0;
}
4.1.2 运行结果
b
c
A
4.1.3 原因分析
因为进程是并发执行的,所以进程创建进程 的同时,进程 就输出了“,而进程
和主进程的输出次序是随机性的,所以会出现上述结果:bcA 或有时会出现 cAb。由于
父进程和子进程分别独立的进入就绪队列等待调度,所以谁会先得到调度是不确定的。
因此,谁先从 fork()返回,继续执行后面的语句是不确定的。
4.1.4 程序设计思路
用 函数并循环创建子进程 ,直至成功。此时 的返回值有两种,一种
是等于 ,从子进程返回的 值。一种是大于 ,从父进程返回的子进程的进程 值。
如果是 做子进程的功能在屏幕上显示一个字符,否则父进程继续创建子进程,直至
成功。如果返回值是 做子进程的功能在屏幕上显示一个字符,否者是父进程在屏幕
上显示一个字符。
4.1.5 主要系统调用功能及关键语句的功能说明
(1)fork() 函数用于创建一个新进程子进程
系统调用格式:
该函数使用头文件如下:
!
!
返回值:
子进程中返回 0,父进程中返回子进程 ID,出错返回-1
函数说明:
一个现有进程可以调用 fork 函数创建一个新进程。由 fork 创建的新进程被称为
子进程(child process)。fork 函数被调用一次但返回两次。两次返回的唯一区别
是子进程中返回 0 值而父进程中返回子进程 ID。
子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注
意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储
空间,它们之间共享的存储空间只有代码段。
2
4.2.进程的控制
修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序
执行时屏幕上出现的现象,并分析原因。
如果在程序中使用系统调用 lockf(),来给每一个进程加锁,可以实现进程之间的互
斥,观察并分析出现的现象。
4.2.1 参考程序
#include<stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{pid_t p1,p2;
int i,j;
p1=fork(); /*创建子进程 p1*/
if(p1<0)
printf("error in fork 1!\n"); /*子进程 p1 创建失败*/
else if (p1 == 0)
lockf(1,1,0);/*加锁,第一个参数为 stdout(标准输出设备的描述符)*/
for(i=0;i<1000;i++)
for(j=0;j<100000;j++)
if(j==0)
printf("child process b\n");
lockf(1,0,0); /*解锁*/
else
{p2=fork(); /*创建子进程 p2*/
if(p2<0)
printf("error in fork 2!\n"); /*子进程 p2 创建失败*/
else if (p2 == 0)
lockf(1,1,0); /*加锁,第一个参数为 stdout(标准输出设备的描述符)*/
for(i=0;i<1000;i++)
for(j=0;j<100000;j++)
if(j==0)
printf("child process c\n");
lockf(1,0,0); /*解锁*/
else
lockf(1,1,0); /*加锁,第一个参数为 stdout(标准输出设备的描述符)*/
for(i=0;i<1000;i++)
for(j=0;j<100000;j++)
if(j==0)
printf("parent process A\n");
lockf(1,0,0); /*解锁*/ }
return 0; }
4.2.2 运行结果
child process b
child process c
parent process A
3
4.2.3 原因分析
如果在程序中使用系统调用 lockf(),来给每一个进程加锁,可以实现进程之间的互
斥,观察并分析出现的现象。从进程并发执行来看上面的三个进程没有同步措施,所
以输出次序带有随机性。
由于函数 在输出字符串时不会被中断,因此,字符串内部字符顺序输出不变。
但由于进程并发执行的调度顺序和父子进程抢占处理机问题,输出字符串的顺序和先
后随着执行的不同而发生变化。这与打印单字符的结果相同。不同的进程之间不存在
共享临界资源问题,所以加锁与不加锁效果相同。
4.2.4 程序设计思路
如上,只是输出为变为字符串,并且在程序中使用系统调用 (),来给每一个进
程加锁,实现进程之间的互斥。
4.2.5 主要系统调用功能及关键语句的功能说明
函数用作锁定文件的某些段或者整个文件
系统调用格式:
"#
返回值:
此函数调用成功后,将返回值 0;否则返回−1,并且设置 errno 以表示该错误。
该函数使用头文件如下:
#include <sys/types.h>
#include<stdio.h>
函数说明:
是打开文件的文件描述符。为通过此函数调用建立锁定,文件描述符必须使用只写
权限 ( $%&$'() ) 或 读 写 权 限 ( $&%& ) 打 开 。 如 果 调 用 进 程 是 具 有
*&+($,-&$'()
权限的组的成员,它也可以使用 来锁定使用只读权限($&$'())打开的文
件。
"是指定要采取的操作的控制值,允许的值在中定义,如下所示:
./0($,-11解锁
./($,-11互斥锁定区域
./2($,-11测试互斥锁定区域
./2342511测试区域
/2342用于检测在指定的区域中是否存在其他进程的锁定。如果该区域可访问 ,
将返回 ,否则返回−;在这种情况下,设置为637,,348。是要锁定或解
锁的连续字节数。要锁定的资源从文件中当前偏移量开始,对于正 将向
前扩展,对于负 则向后扩展(直到但不包括当前偏移量的前面的字节数)。如果
为零,则锁定从当前偏移量到文件结尾的区域(即从当前偏移量到现有或任何将
来的文件结束标志)。要锁定
一个区域,不需要将该区域分配到文件中,因为这样的锁定可以在文件结束标志之后
存在。
4.3进程的软中断通信
9 编制一段程序,使其实现进程的软中断通信。
要求:使用系统调用 fork()创建两个子进程,再用系统调用 signal()让父进程捕捉
键盘上来的中断信号;当捕捉到中断信号后,父进程用系统调用 kill()向两个子进程
发出信号,子进程捕捉到信号后分别输出下列信息后终止:
4
剩余16页未读,继续阅读
mayuehaha123
- 粉丝: 5
- 资源: 30
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- stc12c5a60s2 例程
- Android通过全局变量传递数据
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1