文档库 最新最全的文档下载
当前位置:文档库 › 西北工业大学-操作系统实验报告-实验二

西北工业大学-操作系统实验报告-实验二

西北工业大学-操作系统实验报告-实验二
西北工业大学-操作系统实验报告-实验二

实验二FreeBSD的应用软件安装

一、实验目的

学习如何使用FreeBSD安装应用软件。

二、实验内容与要求

1、查阅资料,了解FreeBSD 安装软件的主要方式,每种方式的具体步骤、操作指

南;

2、学习使用FreeBSD安装方法的一种进行安装简单的SSH;

3、详细记录探索学习的内容和实验的整个过程,包括资料的查询、资料的来源(资料名称、网址等)、所做的各种尝试、以及最终的结果(包含截屏);

三、实验过程

1、FreeBSD 安装软件的主要方式

(1).package

用 package 安装,只要抓取该程序 package 档案,简单的透过 --> 安

装pkg_add package_name --> 移除 pkg_delete package_name就可以完成安装 / 移除。

注意:文件名称 .tgz 结尾的是 package 文件名称 .tar.gz 结尾的

是 source 注 : 目前已经安装的 package 数据库放在 /var/db/pkg/ 这个数据夹之中。

通常在比较大型的套件(需要编译很久)或是老是无法编译成功以及想先快速了解未使用过的套件是长成什么样子时,我们会采用这种方式来安装套件。

(2)port

如果你要使用 ports 安装软件,你必须先确认 /usr/ports 这个目录是否有安装。如果没有的话,使用 /stand/sysinstall 来安装 ports 的目录:

1. 以 root 执行 /stand/sysinstall

2. 选择 Configure 后按 Enter

3. 选择 Distributions 后按 Enter

4. 选择 ports 后按空格键

5. 选择 Exit 后按 Enter

6. 选择你要从 CDROM 或 FTP 安装等

7. 跟着选单照做,最后离开 sysinstall

或者我们也可以到 https://www.wendangku.net/doc/7516162205.html,/ports/ 去手动抓回 port.tar.gz 这个档案,将它放在 /usr/ 下。并以下列指令来安装:

# cd /usr

# tar zxvf port.tar.gz

现在可以进入 /usr/ports 的目录中,安装软件了。

通常每一个软件都有一个独立的目录,而目录中都存在着一些档案,每个档案都有其特定用途,我们简列如下:

Makefile:安装软件的编译设定,您可以修改这个档案来设定我们在编译及安装软件时的参数。

README.html:我们可以经由浏览 README.html 来查看所有 ports 目录下的软件说明。

Distinfo:说明安装所需要的档案及其 MD5 的检查数据。

pkg-comment:简单的软件描述。

pkg-descr:较详细的描述,我们通常可以在里面找到该软件网页的位置,使我们能到该网页得到更多信息。

pkg-plist:列出软件将安装的清单,安装后会放在硬盘中的什么地方。

如果您想安装某一个软件,却不知道它的目录位置,您可以使用 whereis 这个指令来找出它来。例如我们想安装 qpopper ,可以使用 whereis qpopper 来找出它所在的目录。或者果我们只知道某个程序的关键词,确不知道它放在哪个目录,我们可以使用下列指令:

# cd /usr/ports

# make search key='关键词'

进入该目录后,最简单的安装方式是直接打 make install,系统就会自动去网络上抓取需要的软件回来安装。安装 ports 时,make 时找档案的顺序是:先去

/usr/ports/distfiles 、再去找 /cdrom/ports/distfiles、最后是网络中下载。如果不使用网络安装的话,可以自己去抓回软件,并将它放在 /usr/ports/distfiles/ 下,这样子在打 make install 时,就不会去网络上抓取档案。如果所需档案存在光盘中,在安装软件之前,必须先将光驱 mount 在 /cdrom 中。但有的软件并不会到光盘中去寻找档案,所以还是将光盘中 /ports/distfiles 目录内容复制到 /usr/ports/distfiles 目录中,或者先连上网络。

当使用网络取得档案时,预设抓取档案的服务器通常在国外,因此,可以修改

/etc/make.conf 来指定使用国内的 FTP 站台,例如编辑 /etc/make.conf 并加入:

MASTER_SITE_BACKUP?= \

ftp://https://www.wendangku.net/doc/7516162205.html,.tw/distfiles/${DIST_SUBDIR}/

ftp://https://www.wendangku.net/doc/7516162205.html,.tw/pub/distfiles/${DIST_SUBDIR}/

MASTER_SITE_OVERRIDE?= ${MASTER_SITE_BACKUP}

当安装完 ports 后,我们可以再下指令 make clean 来清除编译过程产生的档案,建议最好这么做,否则有的过程中产生大量档案可是很惊人的。如果您安装了一堆软件之后,才想到之前没有 make clean,没关系,在安装 ports 时,编译过程的档案都存在于该软件目录下的 work 目录中。我们可以使用下列指令来找出所有未 make clean 的软件,并将暂存数据删除:

# find /usr/ports -depth -name work -exec rm -rf {}

如果使用网络安装,它会将所下载的原始码存在 /usr/ports/distfiles 中,当下make clean 后,并不会将它们清除。

当你安装完后,想要移除该软件时,只要在该软件的 ports 目录中打 make deinstall 即可。请注意,不要在 /usr/ports 的目录中打 make deinstall,这样可是会将 "所有" 软件都移除。

如果安装完新的软件之后,如果使用的 Shell 是 Csh 或 Tcsh,我们可能必须执行指令 rehash 来重建 hash table,之后才能在所设定的指令路径中找到刚安装的程序,不然的话就必须输入该程序的完整路径或重新登入才能使用。

可以在 /var/db/pkg 的目录中看到已安装的软件,每一个软件有一个目录,目录中存放着软件安装的信息,包含了软件说明、安装到哪些目录中。有的软件要安装前,会要求先安装某一套软件,如果你事先没有安装它所要求的软件,通常该软件会自动帮你安装。所以我们会在 /var/db/pkg 下看到一些不是我们主动安装的软件。既然软件之间可能会相互依赖,我们要如何得知这些软件彼此间的关系呢?pkg_tree 这套软件可以让我们检视软件间的关系。我们可以使用 port 来安装这套软件:

# cd /usr/ports/sysutils/pkg_tree

# make install clean

之后就可以使用 pkg_tree | more 来看各个软件之间的关系了。

port 的理念就是帮您简化套件安装的工作,有多简化呢?简化到只需要执行 make install 即可安装完成套件。至于套件的相依性则完全无需操心,port 会自行为安装其它所需的套件。

我们不会受限于 port,因为还是可以透过参数的给予或编修该套件的 Makefile 档案内容来决定该套件所要安装的内容,而不用担心还是装了一些用不到的档案而使系统日益肥硕。

prot 还可让您针对经常性使用的套件来制作成 package 包装档,自行产生的包装档可针对工作上所需与系统的环境来订制,以供日后系统重新安装或至他台电脑主机上安装。自行制做的 package 运作上将会比由网络上抓取回来的 package 要来的适用,因为它是您自己针对需求量身订制的。

(3)tarball

通常我们应该是用不着使用 tarball 来安装套件的,但是还是可能会有机会用到它。比如要使用的套件尚未被移植到 ports 中,或新版本出来了,但 ports 尚未更新到较新的版本,而我们却急着想要试试新版本的功能。

当有类似这些情况时,就会需要使用 tarball 的安装方式来安装这些您想要使用的套件。使用 tarball 的安装方式,将拥有独一无二的机器风格,可完完全全掌控您的系统。但是相对的,系统也只有自己才了解您当初为套件加了哪些安装参数,这造成了接手人的困扰,接手人最后的决定通常是重新安装整个系统。

因此建议,除非系统是私人拥有的,如果有交接的情况会发生的话,建议还是采用port 的方式来建立您的工作环境,不然就得为整个建立过程做一笔记,并将它交接给接手人。

2、安装简单的SSH

sshd的配置文件一般位于/etc/ssh/sshd_config。

首先vi编辑/etc/inetd.conf,去掉ssh前的#,保存退出 (开启****ssh服务)。

编辑/etc/rc.conf,最后加入:sshd_enable="yes"即可。

最后,编辑sshd的配置文件:vi /etc/ssh/sshd_config, 如下图所示:

#Protocol 2,1修改为:

Protocol 2

#ListenAddress 0.0.0.0修改为:

ListenAddress 0.0.0.0

#PermitRootLogin yes 修改为:

PermitRootLogin yes

修改完成后重启sshd: /etc/rc.d/sshd restart。

现在即可ssh登陆。

3、实验过程中所涉及资料及其来源

(1)中国网管联盟-FreeBSD 软件的安装方式

原文链接:https://www.wendangku.net/doc/7516162205.html,/os/unix/200604/8993.html。

(2)源码天空- freebsd安装:FreeBSD 软件的安装方式

原文链接:https://www.wendangku.net/doc/7516162205.html,/article/200812/160388.html。

(3)脚本之家-FREEBSD软件安装

原文链接:https://www.wendangku.net/doc/7516162205.html,/os/Unix/1486.html

四、实验分析与总结

在实验过程中,遇到了不少问题,尤其是安装SSH时,刚开始怎么也安装不对,后来经过查询资料和仔细地检,发现是配置文件没有修改正确,修改配置文件后解决了问题。出现这些问题主要是因为对FreeBSD环境还不熟悉,也因为自己不细心,导致操作出现错误。

经过本次实验,我对FreeBSD 安装软件的主要方式,以及每种方式的具体步骤有了一个一定的了解,并学会使用FreeBSD安装方法的一种进行安装简单的SSH。

西北工业大学操作系统实验报告实验四

实验四进程与线程一、实验目的 (1)理解进程的独立空间; (2)理解线程的相关概念。 二、实验内容与要求 1、查阅资料,掌握进程创建和构造的相关知识和线程创建和构造的相关知 识,了解C语言程序编写的相关知识; 2、理解进程的独立空间的实验内容及步骤 (1)编写一个程序,在其 main()函数中定义一个变量 shared,对其进行循环加/减操作,并输出每次操作后的结果; (2)使用系统调用 fork()创建子进程,观察该变量的变化; (3)修改程序把 shared变量定义到 main()函数之外,重复第(2)步操作,观察该变量的变化。 3、理解线程的实验步骤 (1)编写一个程序,在其 main()函数中创建一个(或多个)线程,观察该线程是如何与主线程并发运行的。输出每次操作后的结果; (2)在 main()函数外定义一个变量shared(全局变量),在main()中创建一个线程,在 main()中和新线程shared进行循环加/减操作,观察该变量的变化; (3)修改程序把shared变量定义到 main()函数之内,重复第(2)步操作,观察该变量的变化。

4、对整个实验过程进行分析总结,给出详细步骤; (1) 观察上述进程执行结果,并分析原因; (2) 提交源程序清单,并附加流程图与注释。 三、实验过程 1、进程的与线程的创建和构造 (1).进程的创建和构造 进程简单来说就是在操作系统中运行的程序,它是操作系统资源管理的最小单位。但是进程是一个动态的实体,它是程序的一次执行过程。进程和程序的区别在于:进程是动态的,程序是静态的,进程是运行中的程序,而程序是一些保存在硬盘上的可执行代码。 新的进程通过克隆旧的程序(当前进程)而建立。fork()和clone()(对于线程)系统调用可用来建立新的进程。 (2)线程的创建和构造 线程也称做轻量级进程。就像进程一样,线程在程序中是独立的、并发的执行路径,每个线程有它自己的堆栈、自己的程序计数器和自己的局部变量。但是,与独立的进程相比,进程中的线程之间的独立程度要小。它们共享内存、文件句柄和其他每个进程应有的状态。 线程的出现也并不是为了取代进程,而是对进程的功能作了扩展。进程可以支持多个线程,它们看似同时执行,但相互之间并不同步。一个进程中的多个线程共享相同的内存地址空间,这就意味着它们可以访问相同的变量和对象,而且它们从同一堆中分配对象。尽管这让线程之间共享信息变得更容易,但你必须小心,确保它们不会妨碍同一进程里的其他线程。 线程与进程相似,是一段完成某个特定功能的代码,是程序中单个顺序的流控制,但与进程不同的是,同类的多个线程是共享同一块内存空间和一组系统资

西工大操作系统-简答题

操作系统 一、1.什么是操作系统?从资源管理看操作系统的功能有哪些?答:(1).操作系统是一个系统软件,它能有效地管理和控制计算机系统中的各种硬件和软件资源、合理组织计算机的工作流程,方便用户使用的程序和数据的集合。 (2).a.处理机管理:分配和控制处理机 b.存储器管理:分配及回收内存 c. I/O(Input/Output)设备管理:I/O分配与操作 d.文件管理:文件存取、共享和保护(详见课本P2-3) 2.什么叫并发性?什么叫并行性? 答:并发性:两个或两个以上事件在同一时间间隔内发生。 并行性:两个或两个以上事件在同一时刻发生。 3.试从交互性、及时性以及可靠性方面,将分时系统与实时系统进行比较。 答:及时性:实时系统要求更高 [分时系统:秒级(一般情况)实时系统: 微秒级甚至更小] 交互性:分时系统交互性更强 可靠性:实时系统要求更高(详见课本P9和P11) 三、1.在操作系统中为什么要引入进程的概念?它与程序的区别和联系是怎样的? 答:(1)程序在并发执行方式下,运行时具有异步性的特征,“程序”这个静态概念已经不足以描述程序的执行过程。这样,就需要一个数据结构PCB来记录程序的状态,以及控制其状态转换所需的一些信息。因此,将PCB、程序、数

据三者组成一个完整的实体,就是进程实体。进程是程序的一次执行,引入进程的概念,便于操作系统对于程序的运行进行控制。 (2)区别:1)程序是指令的有序集合,是静态的,进程是程序的执行,是动态的。2)进程的存在是暂时的,程序的存在是永久的。3)进程的组成应包括程序和数据。除此之外,进程还应由记录进程状态信息的“进程控制块”组成。 联系:程序是构成进程的组成部分之一,一个进程的运行目标是执行它所对应的程序。如果没有程序,进程就失去了其存在的意义。从静态的角度看,进程由程序、数据和进程控制块三部分组成。 2.什么是进程的互斥与同步? 答:进程互斥:指两个或两个以上的进程由于竞争资源而形成的制约关系。 进程同步:指两个或两个以上的进程由于某种时序上的限制而形成的相互合作的制约关系。 3.一个进程进入临界区的调度原则是什么? 答:①如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。②任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。③进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。④如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。 4.说明进程的结构、特征和基本状态。 答:进程是程序在其数据集合上的一次运行活动,是资源分配和独立调度的基本单位。进程由程序、数据和进程控制块组成 进程的特征:动态性、并发性、独立性、异步性

操作系统实验报告一

重庆大学 学生实验报告 实验课程名称操作系统原理 开课实验室DS1501 学院软件学院年级2013专业班软件工程2 班学生姓名胡其友学号20131802 开课时间2015至2016学年第一学期 总成绩 教师签名洪明坚 软件学院制

《操作系统原理》实验报告 开课实验室:年月日学院软件学院年级、专业、班2013级软件工 程2班 姓名胡其友成绩 课程名称操作系统原理 实验项目 名称 指导教师洪明坚 教师 评语教师签名:洪明坚年月日 1.实验目的: ?进入实验环境 –双击expenv/setvars.bat ?检出(checkout)EPOS的源代码 –svn checkout https://www.wendangku.net/doc/7516162205.html,/svn/epos ?编译及运行 –cd epos/app –make run ?清除所有的临时文件 –make clean ?调试 –make debug ?在“Bochs Enhanced Debugger”中,输入“quit”退出调试 –调试指令,请看附录A 2.实验内容: ?编写系统调用“time_t time(time_t *loc)” –功能描述 ?返回从格林尼治时间1970年1月1日午夜起所经过的秒数。如果指针loc 非NULL,则返回值也被填到loc所指向的内存位置 –数据类型time_t其实就是long ?typedef long time_t; 3.实验步骤: ?Kernel space –K1、在machdep.c中,编写系统调用的实现函数“time_t sys_time()”,计算用户秒数。需要用到 ?变量g_startup_time,它记录了EPOS启动时,距离格林尼治时间1970年1午夜的秒数 ?变量g_timer_ticks

西北工业大学操作系统实验_OS3(10)

评语: 课中检查完成的题号及题数: 课后完成的题号与题数: 成绩: 指导教师: 实验报告三 实验名称:七、八日期:2013.05.23 班级:10011007 学号:2010302555 姓名:杨宏志实验七理解线程的相关概念 1. 实验目的 理解当操作系统引入线程的概念后,进程是操作系统独立分配资源的单位,线程成为系统调度的单位,与同一个进程中的其他线程共享程序空间。 2. 实验预习内容 预习线程创建和构造的相关知识,了解C语言程序编写的相关知识。 3. 实验内容及步骤 (1)编写一个程序,在其main()函数中创建一个(或多个)线程,观察该线程是如何与主线程并发运行的。输出每次操作后的结果; (2)在main()函数外定义一个变量shared(全局变量),在main()中创建一个线程,在main()中和新线程shared 进行循环加/减操作,观察该变量的变化; (3)修改程序把shared 变量定义到main()函数之内,重复第(2)步操作,观察该变量的变化。

4. 实验总结 (1) 观察上述程序执行结果,并分析原因; (2) 提交源程序清单,并附加流程图与注释。思考:分析进程和线程的不同之处。 5. 具体实现 1)观察线程并发性: #include #include #include void * func(void *params) { while(1) { printf("i am the thread 2\n"); sleep(1); } return NULL; } int main() { pthread_t tid; int res=pthread_create(&tid, NULL,func,NULL); while(1) { printf("i am main thread\n"); sleep(1); } return 0; }

操作系统实验报告-实验二

操作系统实验报告——实验二:C编程环境 实验目的 1.熟悉Linux下C程序设计的环境; 2.对系统调用有初步了解。 实验内容 1.Linux下C语言程序的开发过程 a、在用户主目录下用vi编辑C语言源程序(源程序已附后),如:$vi hello.c。 b、用gcc编译C语言源程序:$gcc ./hello.c -o example 这里gcc是Linux下的C语言程序编译器(GNU C Compiler),./hello.c表示待编译的源文件是当前工作目录下的hello.c,-o example表示编译后产生的目标代码文件名为example。 c、若编译不正确,则进入vi修改源程序,否则,运行目标代码:$./example 。注意: 这只是gcc最基本的用法,其他常用选项有:-c , -S , -O , -O2, -g 等。 2.编辑、调试下面c语言程序,说明该程序的功能。 #include #include int main() { int n,a[200],carry,temp,i,j,digit = 1; printf("Please input n:"); scanf("%d",&n); a[0] = 1; for( i = 2; i <= n; ++i) { for( j = 1, carry = 0; j <= digit; ++j) { temp = a[j-1] * i + carry; a[j-1] = temp % 10; carry = temp / 10; } while(carry) { a[++digit-1] = carry % 10; carry /= 10; } } printf("Result is:\n%d ! = ",n); for( i = digit; i >=1; --i) { printf("%d",a[i-1]); }

操作系统lab2实验报告

HUNAN UNIVERSITY 操作系统实验报告

目录 一、内容 (3) 二、目的 (3) 三、实验设计思想和练习题 (3) 练习0:填写已有实验 (3) 练习1:实现 first-fit 连续物理内存分配算法(需要编程) (3) 练习2:实现寻找虚拟地址对应的页表项(需要编程) (8) 练习3:释放某虚地址所在的页并取消对应二级页表项的映射(需要编程) (11) 运行结果 (13) 四、实验体会 (13)

一、内容 本次实验包含三个部分。首先了解如何发现系统中的物理内存;然后了解如何建立对物理内存的初步管理,即了解连续物理内存管理;最后了解页表相关的操作,即如何建立页表来实现虚拟内存到物理内存之间的映射,对段页式内存管理机制有一个比较全面的了解。 二、目的 1.理解基于段页式内存地址的转换机制; 2.理解页表的建立和使用方法; 3.理解物理内存的管理方法。 三、实验设计思想和练习题 练习0:填写已有实验 使用eclipse中的diff/merge工具将实验1的代码填入本实验中代码中有“LAB1”的注释相应部分。 练习1:实现 first-fit 连续物理内存分配算法(需要编程) 在实现first fit 内存分配算法的回收函数时,要考虑地址连续的空闲块之间的合并操作。提示:在建立空闲页块链表时,需要按照空闲页块起始地址来排序,形成一个有序的链表。可能会修改default_pmm.c 中的default_init,default_init_memmap,default_alloc_pages, default_free_pages等相关函数。请仔细查看和理解default_pmm.c中的注释。 请在实验报告中简要说明你的设计实现过程。请回答如下问题: 你的first fit算法是否有进一步的改进空间。 解答: 分析思路: (1)数据结构: A.每个物理页利用一个Page结构体表示,查看kern/mm/memlayout.h包括:

西工大作业机考《计算机操作系统》标准

试卷总分:100 得分:98 一、单选题 (共 50 道试题,共 100 分) 1. 在()中,不可能产生系统抖动的现象。 A.固定分区管理 B.请求页式管理 C.段式管理 D.机器中不存在病毒时 正确答案: 2. 主要由于()原因,使UNIX易于移植。 A.UNIX是由机器指令编写的 B.UNIX大部分用汇编少部分用C语言编写 C.UNIX是用汇编语言编写的 D.UNIX小部分用汇编大部分用C语言编写 正确答案: 3. 磁盘是共享设备,每一时刻()进程与它交换信息。 A.可有任意多个 B.限定n个 C.至少有一个 D.最多有一个 正确答案: 4. 操作系统是一种()。 A.应用软件 B.系统软件 C.通用软件 D.工具软件 正确答案: 5. 操作系统提供的系统调用大致可分为()等几类。 A.文件操作类、资源申请类、控制类、设备调用类 B.文件操作类、资源申请类、控制类、信息维护类 C.文件操作类、资源申请类、信息维护类、设备调用类 D.资源申请类、控制类、信息维护类、设备调用类 正确答案: 6. 并发性是指若干事件在()发生。

B.同一时间间隔内 C.不同时刻 D.不同时间间隔内 正确答案: 7. 引入多道程序技术后,处理机的利用率()。 A.降低了 B.有所改善 C.大大提高 D.没有变化,只是程序的执行方便了 正确答案: 8. 一个进程被唤醒意味着()。 A.该进程重新占有了CPU B.进程状态变为就绪 C.它的优先权变为最大 D.其PCB移至就绪队列的队首 正确答案: 9. 进程间的基本关系为()。 A.相互独立与相互制约 B.同步与互斥 C.并行执行与资源共享 D.信息传递与信息缓冲 正确答案: 10. 下列方法中哪一个破坏了“循环等待”条件?() A.银行家算法 B.一次性分配策略(即预分配策略) C.剥夺资源法 D.资源有序分配 正确答案: 11. 存储管理的目的是()。 A.方便用户 B.提高内存利用率 C.A和B D.增加内存实际容量

上海大学操作系统(二)实验报告(全)

评分: SHANGHAI UNIVERSITY 操作系统实验报告 学院计算机工程与科学 专业计算机科学与技术 学号 学生姓名

《计算机操作系统》实验一报告 实验一题目:操作系统的进程调度 姓名:张佳慧学号 :12122544 实验日期: 2015.1 实验环境: Microsoft Visual Studio 实验目的: 进程是操作系统最重要的概念之一,进程调度又是操作系统核心的主要内容。本实习要求学生独立地用高级语言编写和调试一个简单的进程调度程序。调度算法可任意选择或自行设计。例如,简单轮转法和优先数法等。本实习可加深对于进程调度和各种调度算法的理解。实验内容: 1、设计一个有n个进程工行的进程调度程序。每个进程由一个进程控制块(PCB)表示。进程控制块通常应包含下述信息:进程名、进程优先数、进程需要运行的时间、占用CPU的时间以及进程的状态等,且可按调度算法的不同而增删。 2、调度程序应包含2~3种不同的调度算法,运行时可任意选一种,以利于各种算法的分析比较。 3、系统应能显示或打印各进程状态和参数的变化情况,便于观察诸进程的调度过程。 操作过程: 1、本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。进程控制块结构如下: 进程控制块结构如下: PCB 进程标识数 链指针 优先数/轮转时间片数 占用 CPU 时间片数 进程所需时间片数 进程状态 进程控制块链结构如下:

其中:RUN—当前运行进程指针; HEAD—进程就绪链链首指针; TAID—进程就绪链链尾指针。2、算法与框图 (1) 优先数法。进程就绪链按优先数大小从高到低排列,链首进程首先投入运行。每过一个时间片,运行进程所需运行的时间片数减 1,说明它已运行了一个时间片,优先数也减 3,理由是该进程如果在一个时间片中完成不了,优先级应该降低一级。接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续进行,否则,调度就绪链链首进程投入运行。原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。 (2) 简单轮转法。进程就绪链按各进程进入的先后次序排列,进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相当于优先数法的优先数记录项位置)。每过一个时间片,运行进程占用处理机的时间片数加 1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。 (3) 程序框图

操作系统实验报告

操作系统教程 实 验 指 导 书 姓名: 学号: 班级:软124班 指导老师:郭玉华 2014年12月10日

实验一WINDOWS进程初识 1、实验目的 (1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。 (2)掌握WINDOWS API的使用方法。 (3)编写测试程序,理解用户态运行和核心态运行。 2、实验内容和步骤 (1)编写基本的Win32 Consol Application 步骤1:登录进入Windows,启动VC++ 6.0。 步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。创建一个新的控制台应用程序工程。 步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。 步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。编译成可执行文件。 步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows“命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序: E:\课程\os课\os实验\程序\os11\debug>hello.exe 运行结果 (如果运行不成功,则可能的原因是什么?) : 有可能是因为DOS下路径的问题 (2)计算进程在核心态运行和用户态运行的时间 步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。 步骤2:在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。 步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。 E:\课程\os课\os实验\程序\os12\debug>time TEST.exe 步骤4:运行结果 (如果运行不成功,则可能的原因是什么?) : 因为程序是个死循环程序 步骤5:分别屏蔽While循环中的两个for循环,或调整两个for循环的次数,写出运行结果。 屏蔽i循环: 屏蔽j循环: _______________________________________________________________________________调整循环变量i的循环次数:

西工大计算机操作系统实验报告OS2

评语: 成绩: 指导教师: 实验报告二 日期:2013-5-16 实验名称:构造进程家族树 理解进程的独立空间 一、实验目的: 1. 通过创建若干个子进程,构造进程家族树,分析进程家族树的结构关系;学 习相关系统调用(例如,getpid()和getppid()等)的使用方法。 2. 理解进程是操作系统独立分配资源的单位,进程拥有自己相对独立的程序空 间。 二、实验内容: 1. 进程的创建:编制一段程序,使用系统调用fork()创建三个子进程,在各个子 进程中再使用系统调用fork()进一步创建子进程,如此重复,构造一棵进程家 族树。分别使用系统调用getpid()和getppid()获取当前进程和父进程的 进程标识号并输出。 2. (1)编写一个程序,在其main()函数中定义一个变量shared,对其进行循 环加/减操作,并输出每次操作后的结果; (2)使用系统调用fork()创建子进程,观察该变量的变化; (3)修改程序把shared 变量定义到main()函数之外,重复第(2)步操作,观察该变量的变化。 三、项目要求及分析: 1.学习进程构造的相关知识,学习获取进程相关信息的系统调用函数。利用系统调用getpid()和getppid()所获得的进程标识号信息,验证是否进程间关系是否满足要求的进程家族树。 2.了解进程创建和构造的相关知识,了解C语言程序编写的相关知识。 观察进程执行结果,根据进程间的执行关系思考原因,并和线程进行比较。 四、具体实现:

4.1 流程图 1.进程家族树 Pid_1=fork() Pid_2=fork() Pid_1<0? error Pid_1==0? 输出pid 和ppid Pid_2<0? ERROR Y N Y Y Pid_2==0? Pid_2_1=fork() Pid_2_1<0? ERROR Y Y Pid_2_1==0? 输出pid 和ppid Pid_2_2=fork() N Y pid1>0?Pid_2_1>0? Pid_2_2<0? ERROR Pid_2_2==0? 输出pid 和ppid N Y Pid_2>0? Pid_3=fork() Pid_3<0? ERROR Pid_3==0? 输出pid 和ppid N N Y Y Y Y N N Y N Y 2.

计算机操作系统 实验报告

操作系统实验报告 学院:计算机与通信工程学院 专业:计算机科学与技术 班级: 学号: 姓名: 指导教师: 成绩: 2014年 1 月 1 日

实验一线程的状态和转换(5分) 1 实验目的和要求 目的:熟悉线程的状态及其转换,理解线程状态转换与线程调度的关系。 要求: (1)跟踪调试EOS线程在各种状态间的转换过程,分析EOS中线程状态及其转换的相关源代码; (2)修改EOS的源代码,为线程增加挂起状态。 2 完成的实验内容 2.1 EOS线程状态转换过程的跟踪与源代码分析 (分析EOS中线程状态及其转换的核心源代码,说明EOS定义的线程状态以及状态转换的实现方法;给出在本部分实验过程中完成的主要工作,包括调试、跟踪与思考等) 1.EOS 准备了一个控制台命令“loop ”,这个命令的命令函数是 ke/sysproc.c 文件中的ConsoleCmdLoop 函数(第797行,在此函数中使用 LoopThreadFunction 函数(第755 行)创建了一个优先级为 8 的线程(后面简称为“loop 线程”),该线程会在控制台中不停的(死循环)输出该线程的ID和执行计数,执行计数会不停的增长以表示该线程在不停的运行。loop命令执行的效果可以参见下图: 2. 线程由阻塞状态进入就绪状态 (1)在虚拟机窗口中按下一次空格键。 (2)此时EOS会在PspUnwaitThread函数中的断点处中断。在“调试”菜单中选择“快速监视”,在快速监视对话框的表达式编辑框中输入表达式“*Thread”,然后点击“重新计算”按钮,即可查看线程控制块(TCB)中的信息。其中State域的值为3(Waiting),双向链表项StateListEntry的Next和Prev指针的值都不为0,说明这个线程还处于阻塞状态,并在某个同步对象的等待队列中;StartAddr域的值为IopConsoleDispatchThread,说明这个线程就是控制台派遣线程。 (3)关闭快速监视对话框,激活“调用堆栈”窗口。根据当前的调用堆栈,可以看到是由键盘中断服务程序(KdbIsr)进入的。当按下空格键后,就会发生键盘中断,从而触发键盘中断服务程序。在该服务程序的最后中会唤醒控制台派遣线程,将键盘事件派遣到活动的控制台。 (4)在“调用堆栈”窗口中双击PspWakeThread函数对应的堆栈项。可以看到在此函数中连续调用了PspUnwaitThread函数和PspReadyThread函数,从而使处于阻塞状态的控制台派遣线程进入就绪状态。 (5)在“调用堆栈”窗口中双击PspUnwaitThread函数对应的堆栈项,先来看看此函数是如何改变线程状态的。按F10单步调试直到此函数的最后,然后再从快速监视对

西工大操作系统-简答题

操作系统 一、1.什么是操作系统从资源管理看操作系统的功能有哪些 答:(1).操作系统是一个系统软件,它能有效地管理和控制计算机系统中的各种硬件和软件资源、合理组织计算机的工作流程,方便用户使用的程序和数据的集合。 (2).a.处理机管理:分配和控制处理机 b.存储器管理:分配及回收内存 c. I/O(Input/Output)设备管理:I/O分配与操作 d.文件管理:文件存取、共享和保护(详见课本P2-3) 2.什么叫并发性什么叫并行性 答:并发性:两个或两个以上事件在同一时间间隔内发生。 并行性:两个或两个以上事件在同一时刻发生。 3.试从交互性、及时性以及可靠性方面,将分时系统与实时系统进行比较。 答:及时性:实时系统要求更高 [分时系统 :秒级(一般情况)实时系统: 微秒级甚至更小]交互性:分时系统交互性更强 可靠性:实时系统要求更高(详见课本P9和P11) 三、1.在操作系统中为什么要引入进程的概念它与程序的区别和联系是怎样的 答:(1)程序在并发执行方式下,运行时具有异步性的特征,“程序”这个静态概念已经不足以描述程序的执行过程。这样,就需要一个数据结构PCB来记录程序的状态,以及控制其状态转换所需的一些信息。因此,将PCB、程序、数据三者组成一个完整的实体,就是进程实体。进程是程序的一次执行,引入进程的概念,便于操作系统对于程序的运行进行控制。 (2)区别:1)程序是指令的有序集合,是静态的,进程是程序的执行,是

动态的。2)进程的存在是暂时的,程序的存在是永久的。3)进程的组成应包括程序和数据。除此之外,进程还应由记录进程状态信息的“进程控制块”组成。 联系:程序是构成进程的组成部分之一,一个进程的运行目标是执行它所对应的程序。如果没有程序,进程就失去了其存在的意义。从静态的角度看,进程由程序、数据和进程控制块三部分组成。 2.什么是进程的互斥与同步 答:进程互斥:指两个或两个以上的进程由于竞争资源而形成的制约关系。 进程同步:指两个或两个以上的进程由于某种时序上的限制而形成的相互合作的制约关系。 3.一个进程进入临界区的调度原则是什么 答:①如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。②任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。③进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。④如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。 4.说明进程的结构、特征和基本状态。 答:进程是程序在其数据集合上的一次运行活动,是资源分配和独立调度的基本单位。进程由程序、数据和进程控制块组成 进程的特征:动态性、并发性、独立性、异步性 进程状态有就绪、执行和阻塞。就绪转换为执行由于进程调度,执行转换为就绪由于时间片到,执行转换为阻塞由于等待外部事件,阻塞转换为就绪由于外部事件发生了。 六、1.段页式管理中,怎样访问内存,取得某一条数据或指令 答:在段页式系统中,为了获得一条数据或指令,须三次访问内存。 第一次是访问内存中的段表,从中取得页表始址; 第二次是访问内存中的页表,从中取出该页所在的物理块号,并将该块号与

操作系统实验报告

操作系统教程实验报告 专业班级 学号 姓名 指导教师

实验一WINDOWS进程初识 1、实验目的 (1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。 (2)掌握WINDOWS API的使用方法。 (3)编写测试程序,理解用户态运行和核心态运行。 2、实验内容和步骤 (1)编写基本的Win32 Consol Application 步骤1:登录进入Windows,启动VC++ 6.0。 步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。创建一个新的控制台应用程序工程。 步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。 步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。编译成可执行文件。 步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows “命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序:E:\课程\os课\os实验\程序\os11\debug>hello.exe 运行结果 (如果运行不成功,则可能的原因是什么?) : (2)计算进程在核心态运行和用户态运行的时间 步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。 步骤2:在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。 步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。 E:\课程\os课\os实验\程序\os12\debug>time TEST.exe 步骤4:运行结果 (如果运行不成功,则可能的原因是什么?) : 步骤5:分别屏蔽While循环中的两个for循环,或调整两个for循环的次数,写出运行结果。 屏蔽i循环:

操作系统实验报告.

学生学号0121210680225 实验课成绩 武汉理工大学 学生实验报告书 实验课程名称操作系统 开课学院计算机科学与技术学院 指导老师姓名刘军 学生姓名李安福 学生专业班级软件sy1201 2014 — 2015 学年第一学期

《操作系统》实验教学大纲 课程编号: 课程名称:操作系统/Operating System 实验总学时数:12学时 适应专业:计算机科学与技术、软件工程 承担实验室:计算机科学与技术学院实验中心 一、实验教学的目的和任务 通过实验掌握Linux系统下常用键盘命令、系统调用、SHELL编程、后台批处理和C程序开发调试手段等基本用法。 二、实验项目及学时分配 序号实验项目名称实验学时实验类型开出要求 01 Linux键盘命令和vi 2 设计必开 02 Linux下C编程 2 设计必开 03 SHELL编程和后台批处理 2 设计必开 04 Linux系统调用(time) 2 设计必开 05 Linux进程控制(fork) 4 设计必开 三、每项实验的内容和要求: 1、Linux键盘命令和vi 要求:掌握Linux系统键盘命令的使用方法。 内容:见教材p4, p9, p40, p49-53, p89, p100 2、Linux下的C编程 要求:掌握vi编辑器的使用方法;掌握Linux下C程序的源程序编辑方法;编译、连接和运行方法。 内容:设计、编辑、编译、连接以及运行一个C程序,其中包含键盘输入和屏幕输出语句。 3、SHELL编程和后台批处理 要求:掌握Linux系统的SHELL编程方法和后台批处理方法。 内容:(1) 将编译、连接以及运行上述C程序各步骤用SHELL程序批处理完成,前台运行。 (2) 将上面SHELLL程序后台运行。观察原C程序运行时输入输出情况。 (3) 修改调试上面SHELL程序和C程序,使得在后台批处理方式下,原键 盘输入内容可以键盘命令行位置参数方式交互式输入替代原键盘输入内容, 然后输出到屏幕。 4、Linux系统调用使用方法。

西北工业大学操作系统实验_OS3(5)

班级:10011007 学号:2010302541 姓名:陈一凡 实验七理解线程的相关概念 一.实验目的 理解当操作系统引入线程的概念后,进程是操作系统独立分配资源的单位,线程成为系统调度的单位,也是系统并发运行的独立单位。同一个进程中的各个线程共享进程的地址空间。 二.实验内容 (1)编写一个程序,在其main ()函数中创建一个(或多个)线程,观察该线 程是如何与主线程并发运行的。输出每次操作后的结果; (2)在main()函数外定义一个变量int shared (全局变量),在main()中创建一 个线程,在main()中和新线程shared 进行循环加/减操作,观察该变量的变化; (3)修改程序把int shared 变量定义到main ()函数之内,重复第(2)步操作, 观察该变量的变化; (4)编写一个程序,在其main ()函数中创建至少两个线程,在这些线程中分 别说明(定义)名称相同的整型变量(例如,int x ;),分别在各个线程中修改这些变量,试观察这些变量值的变化。 开始 创建主进程 设置局部变量shared Sleep 1 S 创建线程 Shared++ 输出Shared 的值 结束 开始 设置全局变量shared 创建主进程 Sleep 1 S 创建线程 Shared++ 输出Shared 的值 结束

实验八请求分页存储管理设计 一、实验目的 模拟存储管理常用的请求分页存储管理技术,通过本实验使学生更加深入的理解虚拟内存的思想和主要的页面淘汰算法。 二、实验内容 (1) 通过随机数产生一个指令行列,共320条指令,指令中的地址按下述原则生成:50%的指令是顺序执行;25%的指令均匀分布在前地址部分;25%的指令均匀分布在后地址部分。 (2) 具体实验办法是:在[0,319]之间选一起始点M;顺序执行一条指令,即第M+1条;向前地址[0,M-1]中执行一条指令M;顺序执行一条指令,即第M+1条;向后地址[M+2,319]中执行一条指令M。如此继续,直至产生320条指令。使用产生随机数的函数之前,首先要初始化设置RAN()产生序列的开始点, SRAND(400);然后计算随机数,产生指令序列。例如: a[0]=1.0*rand()/32767*319+1; a[1]=a[0]+1; a[2]=1.0*rand()/32767*(a[1]-1)+1; a[3]=a[2]+1; a[4]=319-1.0*rand()/32767*(a[3]-1);其中rand()和srand()为Linux操作系统提供的函数分别进行初始化和产生随机数,多次重复使用这5条指令,产生以后的指

操作系统原理实验报告(终版)

操作系统原理实验报告(终版)

————————————————————————————————作者:————————————————————————————————日期:

[键入文字] XX学校 实验报告 课程名称: 学院: 专业班: 姓名: 学号: 指导教师: 2011 年3 月

目录 实验1 进程管理 (3) 一、实验目的 (3) 二、实验内容 (3) 三、实验要求 (3) 四、程序说明和程序流程图 (4) 五、程序代码 (5) 六、程序运行结果及分析 (7) 七.指导教师评议 (8) 实验2 进程通信 (9) 一、实验目的 (9) 二、实验内容 (9) 三、实验要求 (9) 四、程序说明和程序流程图 (9) 五、程序代码 (11) 七.指导教师评议 (14) 实验3 存储管理 (15) 一、实验目的 (15) 二、实验内容 (15) 三、实验要求 (15) 四、程序说明和程序流程图 (16) 六、程序运行结果及分析 (23)

七.指导教师评议 (23) 实验4 文件系统 (24) 一、实验目的 (24) 二、实验内容 (24) 三、实验要求 (24) 四、程序说明和程序流程图 (24) 五、程序代码 (26) 六、程序运行结果及分析 (26) 七.指导教师评议 (27)

实验1 进程管理 一、实验目的 1. 弄清进程和程序的区别,加深对进程概念的理解。 2. 了解并发进程的执行过程,进一步认识并发执行的实质。 3. 掌握解决进程互斥使用资源的方法。 二、实验内容 1. 管道通信 使用系统调用pipe( )建立一个管道,然后使用系统调用fork( )创建2个子进程p1和p2。这2个子进程分别向管道中写入字符串:“Child process p1 is sending message!”和“Child process p2 is sending message!”,而父进程则从管道中读出来自两个子进程的信息,并显示在屏幕上。 2. 软中断通信 使用系统调用fork( )创建2个子进程p1和p2,在父进程中使用系统调用signal( )捕捉来自键盘上的软中断信号SIGINT(即按Ctrl-C),当捕捉到软中断信号SIGINT后,父进程使用系统调用kill( )分别向2个子进程发出软中断信号SIGUSR1和SIGUSR2,子进程捕捉到信号后分别输出信息“Child process p1 is killed by parent!”和“Child process p2 is killed by parent!”后终止。而父进程等待2个子进程终止后,输出信息“Parent process is killed!”后终止。 三、实验要求 1. 根据实验内容编写C程序。 2. 上机调试程序。 3. 记录并分析程序运行结果。

操作系统实验报告1

操作系统 实验报告 班号:1303107 学号:1130310726 姓名:蔡鹏

1.请简述head.s 的工作原理。 head.s实在32位保护模式下运行的。我认为这段程序主要包括两个部分:1.初始化设置。2.任务执行与切换。 初始设置主要包括了:1.设置GDT表2.设置系统定时芯片3. 设置IDT表(0x08时钟中断和0x80系统调用中断)4.切换到任务0执行 任务切换和执行包括了:1.任务0和任务1 , 2.时钟中断, 3.系统中断 两个任务的在LDT中代码段和数据段描述符的内容都设置为:基地址0x0000;段限长值为0x03ff,实际段长度为4MB。因此在线性地址空间中这个?内核?的代码和数据段与任务的代码和数据段都从线性地址0开始并且由于没有采用分页机制,所以他们都直接对应物理地址0开始处。 为了每隔10毫秒切换运行的任务,head.s程序中把定时器芯片8253的通道0设置成每隔10毫秒就向中断控制芯片8259A发送一个时钟中断请求信号。PC机的ROM BIOS开机时已经在8259A中把时钟中断请求信号设置成中断向量8,因此我们需要在中断8的处理过程中执行任务切换操作。任务切换的实现是查看current变量中的当前运行的任务号,如果为0,就利用任务1的TSS选择符作为操作数执行远跳转指令,从而切换到任务1中,否则反之。

每个任务在执行时,会首先把一个字符的ASCII码放入寄存器AL中,然后调用系统中断调用int 0x80,而该系统调用处理过程则会调用一个简单的字符写屏子程序,把寄存器AL中的字符显示在屏幕上,同时把字符显示的屏幕的下一个位置记录下来,作为下一次显示字符用。在显示过一个字符后,任务代码会使用循环语句延迟一段时间,然后又跳转到任务代码开始处继续循环执行,直到运行了10毫秒而发生了定时中断,从而代码会切换到另一个任务执行。对于任务A,寄存器AL中始终存放字符‘A’,而任务B运行时AL中始终存放字符‘B’。因此程序运行时我们将看到一连串的‘A’和一连串的‘B’间隔的连续不断的显示在屏幕上。若出现了一个‘C’,是由于PC机偶然产生了一个不是时钟中断和系统调用中断的其他中断。因为我们已经在程序中给所有其他中断安装了一个默认中断处理程序。当出现一个其他中断时,系统就会运行这个中断处理程序,于是就会在屏幕上显示一个‘C’,然后退出中断。 4.请记录head.s 的内存分布状况,写明每个数据段,代码段,栈段 的起始与终止的内存地址。

西北工业大学-操作系统实验报告-实验五

实验五进程管理 一、实验目的 (1)加深对进程概念的理解,明确进程和程序的区别; (2)进一步认识并发执行的实质; (3)了解FreeBSD系统中进程通信的基本原理。 二、实验内容与要求 1、掌握进程的概念,明确进程的含义; 2、编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统 中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。试观察记录屏幕上的显示结果(多次运行,查看结果是否有变化),并分析原因; 3、修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程 序执行时屏幕出现的现象(多次运行,查看结果是否有变化),并分析原因; 4、如果在程序中使用调用lockf()来给每一个子进程加锁,可以实现进程之间的互 斥,观察并分析出现的现象; 5、对整个实验过程进行分析总结,给出详细步骤; 三、实验过程 1、进程的概念与含义 狭义:进程就是一段程序的执行过程。 广义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。 进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。 2、编写一段程序,使用系统调用fork( )创建两个子进程 源代码如下所示: #include #include #include #include main() { int p1, p2 if (p1 = fork()) // 子进程1 { printf("b\n"); exit(0); } else { if (p2 = fork()) // 子进程2 { printf("c\n"); exit(0); } else { printf("a\n"); // 父进程 exit(0); } } }

相关文档
相关文档 最新文档