- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
TOC \o 1-3 \t \h \z \u
西 安 邮 电 大 学
《进程和程序:编写命令解释器sh》
课程名称: 高级操作系统实验
专 业: 软件工程
学生学号: 1303210047
学生姓名: 李力
目 录
TOC \o 1-3 \h \u HYPERLINK \l _Toc26339 一、进程与程序 PAGEREF _Toc26339 2
HYPERLINK \l _Toc6932 二、进程的理解 PAGEREF _Toc6932 2
HYPERLINK \l _Toc632 2.1 进程结构理解 PAGEREF _Toc632 2
HYPERLINK \l _Toc6934 三、 shell 运行程序的方式 PAGEREF _Toc6934 4
HYPERLINK \l _Toc5322 3.1 shell的主循环 PAGEREF _Toc5322 4
HYPERLINK \l _Toc3379 3.2 一个程序建立、运行另一个程序,以及退出程序 PAGEREF _Toc3379 5
HYPERLINK \l _Toc8921 3.2.1 一个程序运行另一个程序的方式: exec函数。 PAGEREF _Toc8921 5
HYPERLINK \l _Toc5878 3.2.2 一个程序创建另一个程序的方式: fork函数。 PAGEREF _Toc5878 6
HYPERLINK \l _Toc18020 3.2.3 父进程在执行子进程退出后,继续执行的方式: wait函数 PAGEREF _Toc18020 7
HYPERLINK \l _Toc21495 3.2.4 shell运行程序 PAGEREF _Toc21495 7
HYPERLINK \l _Toc23061 四、 实例演练:实现psh2.c PAGEREF _Toc23061 8
HYPERLINK \l _Toc29673 4.1 步骤分析: PAGEREF _Toc29673 8
HYPERLINK \l _Toc14293 4.2 程序流图 PAGEREF _Toc14293 9
HYPERLINK \l _Toc13830 4.3 核心代码 PAGEREF _Toc13830 10
一、进程与程序
可执行程序是一个机器指令及其数据的序列,一个进程则是程序运行时的内存空间和设置。程序是静止的进程是动态的。进程包括程序和程序处理的对象(数据集)。进程能得到程序处理的结果。进程和程序并非一一对应的。
一个程序运行在不同的数据集上就构成了不同的进程。通常把进程分为系统进程和用户进程两大类。把完成操作系统功能的进程就称为系统进程,而完成用户功能的进程则称为用户进程。
二、进程的理解
进程存在于用户空间,用户空间是存放运行的程序和它们的数据的一部分内存空间。就像管理磁盘的多个文件,内核管理内存中的多个进程,为它们分配存储空间,并记录内存分配情况。
2.1 进程结构理解
为深入了解进程内容,我们通过源码进行学习:
进程数据结构,Linux的进程控制块为一个由结构task_struct所定义的数据结构,这个结构就在上面的sched.h中。这个文件中有一行代码:
struct task_struct {
long state;
long counter; //任务运行时间片
long priority;
long signal; //信号。每个比特代表一种信号。
struct sigaction sigaction[32];
long blocked; /* bitmap of masked signals 进程信号屏蔽码*/
/* various fields */
int exit_code; //退出码,父进程会取得
unsigned long start_code; //代码段地址
unsigned long end_code; //代码长度(字节数)
unsigned long end_data; //代码长度+数据长度(字节数)
unsigned long brk; //总长度
unsigned long start_stack; //堆栈段地址
long pid,father,pgrp,session,leader; //
文档评论(0)