文档库 最新最全的文档下载
当前位置:文档库 › 操作系统Linux进程创建

操作系统Linux进程创建

操作系统Linux进程创建
操作系统Linux进程创建

进程的创建

1、编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中

有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符。

#include

main()

{

int p,x;

p=fork();

if(p>0)

{

x=fork();

if(x>0)

printf("father\n");

else

printf("child2");

}

else

printf("child1");

}

输出结果:

child1

child2

father

2、运行以下程序,分析程序执行过程中产生的进程情况。

#include

main()

{

int p,x;

p=fork();

if (p>0)

fork();

else{

fork();

fork();

}

sleep(15);

}

实验步骤:

编译连接 gcc –o forktree forktree.c

后台运行 ./forktree &

使用 pstree –h 查看进程树

运行结果:

├─gnome-terminal─┬─bash─┬─forktree─┬─forktree─┬─forktr ee───forktree

││││└─forktree

│││└─forktree

││└─pstree

分析:程序运行,系统首先创建一个进程forktree,执行到p=fork()创建一个子进程forktree,子进程获得处理机优先执行,父进程等待;执行else,当执行到第一个fork()函数时,子进程创建了一个进程forktree,称之为孙进程,孙进程获得处理机往下执行,子进程等待;执行到第二个fork()函数时,孙进程又创建一个进程forktree,称之为重孙进程,重孙进程很快执行完,将处理机还给孙进程,孙进程很快执行完,将处理机还给子进程;子进程继续往下执行,执行到第二个fork()函数,又创建一个进程forktree,称之为第二孙进程,并获得处理机执行,此进程很快执行完,将处理机还给子进程,子进程也很快执行完,将处理机还给父进程,父进程P>0执行if语句,运行fork()函数,又创建一个进程forktree,称之为第二子进程,此进程获得处理机执行很快运行完,将处理机还给父进程,父进程运行sleep(15)语句,休眠15秒,用pstree命令查询进程树。

3、运行程序,分析运行结果。

#include

main()

{

int p,x,ppid,pid;

x=0;

p=fork();

if(p>0)

{ printf("parent output x=%d\n",++x);

ppid=getpid();

printf("Thi id number of parent is:ppid=%d\n",ppid);

}

else

{ printf("child output x=%d\n",++x);

pid=getpid();

printf("Thi id number of child is:pid=%d\n",pid);

}

}

运行结果:

Parent output x=1

This id number of parent is:ppid=3110

Child output x =1

This is number of child is:pid=3111

分析:fork创建进程的时候子进程与父进程共享代码区,子进程复制父进程的数据区,所以,

两个进程中的数据互不影响都是1。

4、loop.c

#include

main()

{

while(1){ };

{

实验步骤:

编译 gcc loop.c –o loop

后台运行 ./loop &(可多次使用该命令)

多次使用ps命令查看进程状态

结果:

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

0 S 1000 2645 2643 0 80 0 - 1444 wait pts/0 00:00:00 bash

0 R 1000 3622 2645 78 80 0 - 403 - pts/0 00:00:18 loop

0 R 1000 3627 2645 39 80 0 - 403 - pts/0 00:00:02 loop

0 R 1000 3628 2645 39 80 0 - 403 - pts/0 00:00:01 loop

0 R 1000 3630 2645 0 80 0 - 625 - pts/0 00:00:00 ps

操作系统实验-进程控制

实验一、进程控制实验 1.1 实验目的 加深对于进程并发执行概念的理解。实践并发进程的创建和控制方法。观察和体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练习Linux 系统中进程创建与控制有关的系统调用的编程和调试技术。 1.2 实验说明 1)与进程创建、执行有关的系统调用说明进程可以通过系统调用fork()创建子进程并和其子进程并发执行.子进程初始的执行映像是父进程的一个复本.子进程可以通过exec()系统调用族装入一个新的执行程序。父进程可以使用wait()或waitpid()系统调用等待子进程的结束并负责收集和清理子进程的退出状态。 fork()系统调用语法: #include pid_t fork(void); fork 成功创建子进程后将返回子进程的进程号,不成功会返回-1. exec 系统调用有一组6 个函数,其中示例实验中引用了execve 系统调用语法: #include int execve(const char *path, const char *argv[], const char * envp[]); path 要装入 的新的执行文件的绝对路径名字符串. argv[] 要传递给新执行程序的完整的命令参数列表(可以为空). envp[] 要传递给新执行程序的完整的环境变量参数列表(可以为空).

Exec 执行成功后将用一个新的程序代替原进程,但进程号不变,它绝不会再返回到调用进程了。如果exec 调用失败,它会返回-1。 wait() 系统调用语法: #include #include pid_t wait(int *status); pid_t waitpid(pid_t pid,int *status,int option); status 用 于保留子进程的退出状态 pid 可以为以下可能值: -1 等待所有PGID 等于PID 的绝对值的子进程 1 等待所有子进程 0 等待所有PGID 等于调用进程的子进程 >0 等待PID 等于pid 的子进程option 规 定了调用waitpid 进程的行为: WNOHANG 没有子进程时立即返回 WUNTRACED 没有报告状态的进程时返回 wait 和waitpid 执行成功将返回终止的子进程的进程号,不成功返回-1。 getpid()系统调用语法: #include #include pid_t getpid(void); pid_t getppid(void); getpid 返回当前进程的进程号,getppid 返回当前进程父进程的进程号 2)与进程控制有关的系统调用说明可以通过信号向一个进程发送消息以控制进程的 行为。信号是由中断或异常事件引发的,如:键盘中断、定时器中断、非法内存引

操作系统实验报告--进程的创建

操作系统原理实验报告(一) 进程的创建 2016年11月27日星期日

实验内容: 进程的创建 编写一段源程序,使系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察纪录屏幕上的显示结果,并分析原因。 源代码: #include #include #include int main(){ printf("\n梦想起航的地方:\n"); pid_t fpid1,fpid2;/*fpid表示fork()函数的返回值*/ printf("得到父进程的ID:%d\n",getpid()); printf("\n开始调用fork函数:\n如果调用成功应该会生成一个子进程1\n返回值:若成功调用一次则返回两个值,\n子进程返回0,父进程返回子进程标记(ID);\n 否则,出错返回-1。\n"); fpid1=fork(); fpid2=fork(); if(fpid1<0)exit(0); else if(fpid1>0) printf("\n这个是父进程打印:a\n"); else if(fpid1==0) printf("\n这个是子进程1的打印:b\n"); if(fpid2<0)exit(0); else if(fpid2>0) printf("\n这个还是父进程'打印:a\n"); else if(fpid2==0); printf("\n这个是子进程2的打印:c\n"); }

第二章-操作系统进程(练习题答案)

第二章进程管理 1.操作系统主要是对计算机系统全部 (1) 进行管理,以方便用户、提高计算机使 用效率的一种系统软件。它的主要功能有:处理机管理、存储管理、文件管理、 (2) 管 理和设备管理等。Windows和Unix是最常用的两类操作系统。前者是一个具有图形界面的 窗口式的 (3) 系统软件,后者是一个基本上采用 (4) 语言编制而成的 的系统软件。在 (5) 操作系统控制下,计算机能及时处理由过程控制反馈的信息 并作出响应。 供选答案: (1): A. 应用软件 B. 系统软硬件 C. 资源 D. 设备 (2): A. 数据 B. 作业 C. 中断 D. I/O (3): A. 分时 B. 多任务 C. 多用户 D. 实时 (4): A. PASCAL B. 宏 C. 汇编 D. C (5): A. 网络 B. 分时 C. 批处理 D. 实时 答案:CBBDD 2.操作系统是对计算机资源进行的 (1) 系统软件,是 (2) 的接口。 在处理机管理中,进程是一个重要的概念,它由程序块、 (3) 和数据块三部 分组成,它有3种基本状态,不可能发生的状态转换是 (4) 。 虚拟存储器的作用是允许程序直接访问比内存更大的地址空间,它通常使用 (5) 作为它的一个主要组成部分。 供选答案: (1): A. 输入和输出 B. 键盘操作 C. 管理和控制 D. 汇编和执行 (2): A. 软件和硬件 B. 主机和外设 C. 高级语言和机器语言 D. 用户和计算机 (3): A. 进程控制块 B. 作业控制块 C. 文件控制块 D. 设备控制块 (4): A. 运行态转换为就绪态 B. 就绪态转换为运行态 C. 运行态转换为等待态 D. 等待态转换为运行态 (5): A. 软盘 B. 硬盘 C. CDROM D. 寄存器 答案:CDADB 3.在计算机系统中,允许多个程序同时进入内存并运行,这种方法称为 D。 A. Spodling技术 B. 虚拟存储技术 C. 缓冲技术 D. 多道程序设计技术 4.分时系统追求的目标是 C。 A. 高吞吐率 B. 充分利用内存 C. 快速响应 D. 减少系统开销 5.引入多道程序的目的是 D。

(完整版)操作系统第二章作业答案

第二章作业 1.操作系统中为什么要引入进程的概念?为了实现并发进程中的合作和协调,以及保证系统的安全,操作系统在进程管理方面要做哪些工作? 答:为了从变化角度动态地分析研究可以并发执行的程序,真实的反应系统的独立性、并发性、动态性和相互制约,操作系统中不得不引入进程的概念。 为了防止操作系统及其关键的数据结构如:PCB等,受到用户程序破坏,将处理机分为核心态和用户态。对进程进行创建、撤销以及在某些进程状态之间的转换控制。 2.试描述当前正在运行的进程状态改变时,操作系统进行进程切换的步骤。答:分为两种情况: (1):运行状态就绪状态:根据进程的自身的情况插入到就绪队列的适当位置,系统收回处理及转入进程调度程序重新进行调度。 (2):运行状态→阻塞状态:系统会调用进程调度程序重新选择一个进程投入运行。 3.现代操作系统一般都提供多任务的环境,是回答以下问题。 为支持多进程的并发执行,系统必须建立哪些关于进程的数据结构? 答:系统必须建立PCB。 为支持进程的状态变迁,系统至少应该供哪些进程控制原语? 答:阻塞、唤醒、挂起和激活原语。 当进程的状态变迁时,相应的数据结构发生变化吗? 答:会根据状态的变迁发生相应的变化。例如:将进程PCB中进程的状态从阻塞状态改为就绪状态,并将进程从阻塞队列摘下,投入到就绪队列中。 4.什么是进程控制块?从进程管理、中断处理、进程通信、文件管理、设备管理及存储管理的角度设计进程控制块应该包含的内容。 答:PCB:描述进程本身的特征、状态、调度信息以及对资源占有情况等的数据结构,是进程存在的唯一标识。 进程控制块所包含的内容: ①进程信息描述;②CPU信息状态;③进程调度信息;④进程控制和资源占用信息。 5.假设系统就绪队列中有10个进程,这10个进程轮换执行,每隔300ms轮换一次,CPU在进程切换时所花费的时间是10ms,试问系统化在进程切换上的开销占系统整个时间的比例是多少? 解:P=(10*10)/[(300+10)*10]=3.2% 6.试述线程的特点及其与进程之间的关系。 答:线程的特点:是被独立分派和调度的基本单位。线程与进程的关系:线程是进程的一部分,是进程内的一个实体;一个进程可以有多个线程,但至少必须有一个线程。

操作系统实验报告(进程的创建)(DOC)

实验题目进程的创建小组合作否姓名班级学号 一、实验目的 1、了解进程的创建。 2、了解进程间的调用以及实现。 3、分析进程竞争资源的现象,学习解决互斥的方法。 4、加深对进程概念的理解,认识并发执行的本质。 二.实验环境 Windows 系统的计算机一台,安装了Linux虚拟机 三、实验内容与步骤 1、fork()系统调用的使用例子 程序代码: #include #include #include int glob=3; int main(void) { pid_t pid;int loc=3; printf("before fork();glod=%d,loc=%d.\n",glob,loc); if((pid=fork())<0) { printf("fork() error. \n"); exit(0); } else if(pid==0) { glob++; loc--; printf("child process changes glob and loc: \n"); } else

wait(0); printf("parent process doesn't change the glob and loc:\n"); printf("glob=%d,loc=%d\n",glob,loc); exit(0); } 运行结果: 2、理解vofork()调用: 程序代码: #include #include #include int glob=3; int main(void) { pid_t pid; int loc=3; if((pid=vfork())<0) { printf("vfork() error\n"); exit(0); } else if(pid==0) { glob++; loc--; printf("child process changes the glob and loc\n"); exit(0); } else printf ("parent process doesn't change the glob and loc\n"); printf("glob=%d,val=%d\n",glob,loc);

操作系统进程控制

操作系统课程设计实验报告 实验名称:进程控制 姓名/学号:xx 20091758 一、实验目的 设计并实现Unix的“time”命令。“mytime”命令通过命令行参数接受要运行的程序,创建一个独立的进程来运行该程序,并记录程序运行的时间。 二、实验内容 一、在Windows下实现: ?使用CreateProcess()来创建进程 ?使用WaitForSingleObject()在“mytime”命令和新创建的进程之间同步 ?调用GetSystemTime()来获取时间 在Linux下实现: ?使用fork()/execv()来创建进程运行程序 ?使用wait()等待新创建的进程结束 ?调用gettimeofday()来获取时间 mytime的用法: $ mytime.exe program1 三、实验环境 操作系统:Windows7旗舰版 处理器:Intel Core2 Duo p7450 2.13GHz 内存:2.00GB 32位操作系统 LINUX版本信息:Linux ubuntu 2.6.32-21-generic #32-Ubuntu SMP Fri Apr 16 08:10:02 UTC 2010 i686 GNU/Linux

四、程序设计与实现 一.windows下的实验 1、创建进程之前先用系统函数getsystemtime获取当前时间。 SYSTEMTIME systime; GetSystemTime(&systime); 2、调用createprocess函数创建进程: BOOL bRet = CreateProcess( NULL, //不在此指定可执行文件的文件名 argv[1], //命令行参数 NULL, //默认进程安全性 NULL, //默认线程安全性 FALSE, //当前进程内的句柄不可以被子进程继承 CREATE_NEW_CONSOLE, //为新进程创建一个新的控制台窗口 NULL, //使用本进程的环境变量 NULL, //使用本进程的驱动器和目录 &si, //父进程传给子进程的一些信息 &pi); //保存新进程信息的结构 由于要使用命令行来创建进程,,所以我的createprocess函数第一个参数设置为NULL,通过第二个参数在命令行里实现创建进程。 3、使用等待函数来等待所创建进程的死亡。 WaitForSingleObject(pi.hProcess,INFINITE); 4、再次取得系统当前时间,与上次取得时间作差,得到进程运行时间。 具体做法是:将两次时间对应位作差,然后换算成相应秒数。 t=(systime.wHour-h)*3600+(systime.wMinute-m)*60+systime.wSecond-s+(systime.w Milliseconds-ms)/1000; 二.Linux下的实验 1、创建进程之前先得到系统时间 struct timeval start; struct timeval end; gettimeofday(&start,NULL); 2、用fork函数创建进程,这时函数会返回两个值,需要通过返回值来判断是子进程还 是父进程。 pc = fork(); if ( pc < 0 ) /* 如果出错*/ { exit(1); } else if ( pc == 0) /* 如果是子进程*/ {……} else /* 如果是父进程*/ {……}

操作系统实验报告(进程的创建)

wait(0); printf("parent process doesn't change the glob and loc:\n"); printf("glob=%d,loc=%d\n",glob,loc); exit(0); } 运行结果: 2、理解vofork()调用: 程序代码: #include<> #include #include<> int glob=3; int main(void) { pid_t pid; int loc=3; if((pid=vfork())<0) { printf("vfork() error\n"); exit(0); } else if(pid==0) { glob++; loc--; printf("child process changes the glob and loc\n"); exit(0); } else printf ("parent process doesn't change the glob and loc\n"); printf("glob=%d,val=%d\n",glob,loc);

} 运行结果: 3、给进程指定一个新的运行程序的函数exec(). 程序代码: 代码: #include<> int main(int argc,char * argv[]) { int n; char * * ptr; extern char * * environ; for(n=0;n #include #include<> #include char * env_list[]={"USER=root","PATH=/root/",NULL}; int main() { pid_t pid; if((pid=fork())<0) { printf("fork error!\n"); exit(0); } else if(pid==0) { if(execle("/root/print1","print1","arg1","arg2",(char *)0,env_list)<0) printf("execle error!\n");

操作系统Linux进程创建

进程的创建 1、编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中 有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符。 #include main() { int p,x; p=fork(); if(p>0) { x=fork(); if(x>0) printf("father\n"); else printf("child2"); } else printf("child1"); } 输出结果: child1 child2 father 2、运行以下程序,分析程序执行过程中产生的进程情况。 #include main() { int p,x; p=fork(); if (p>0) fork(); else{ fork(); fork(); } sleep(15); } 实验步骤: 编译连接 gcc –o forktree forktree.c 后台运行 ./forktree & 使用 pstree –h 查看进程树

运行结果: ├─gnome-terminal─┬─bash─┬─forktree─┬─forktree─┬─forktr ee───forktree ││││└─forktree │││└─forktree ││└─pstree 分析:程序运行,系统首先创建一个进程forktree,执行到p=fork()创建一个子进程forktree,子进程获得处理机优先执行,父进程等待;执行else,当执行到第一个fork()函数时,子进程创建了一个进程forktree,称之为孙进程,孙进程获得处理机往下执行,子进程等待;执行到第二个fork()函数时,孙进程又创建一个进程forktree,称之为重孙进程,重孙进程很快执行完,将处理机还给孙进程,孙进程很快执行完,将处理机还给子进程;子进程继续往下执行,执行到第二个fork()函数,又创建一个进程forktree,称之为第二孙进程,并获得处理机执行,此进程很快执行完,将处理机还给子进程,子进程也很快执行完,将处理机还给父进程,父进程P>0执行if语句,运行fork()函数,又创建一个进程forktree,称之为第二子进程,此进程获得处理机执行很快运行完,将处理机还给父进程,父进程运行sleep(15)语句,休眠15秒,用pstree命令查询进程树。 3、运行程序,分析运行结果。 #include main() { int p,x,ppid,pid; x=0; p=fork(); if(p>0) { printf("parent output x=%d\n",++x); ppid=getpid(); printf("Thi id number of parent is:ppid=%d\n",ppid); } else { printf("child output x=%d\n",++x); pid=getpid(); printf("Thi id number of child is:pid=%d\n",pid); } } 运行结果: Parent output x=1 This id number of parent is:ppid=3110 Child output x =1 This is number of child is:pid=3111 分析:fork创建进程的时候子进程与父进程共享代码区,子进程复制父进程的数据区,所以,

操作系统实验二(进程管理)

操作系统进程管理实验 实验题目: (1)进程的创建编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察记录屏幕上的显示结果,并分析原因。 (2)进程的控制修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕上出现的现象,并分析原因。 (3)编制一段程序,使其实现进程的软中断通信。要求:使用系统调用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按Del键);当捕捉到中断信号后,父进程调用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:Child process 1 is killed by parent! Child process 2 is killed by parent! 父进程等待两个子进程终止后,输出如下的信息后终止:Parent process is killed! 在上面的程序中增加语句signal(SIGINT, SIG_IGN)和signal(SIGQUIT, SIG_IGN),观察执行结果,并分析原因。 (4)进程的管道通信编制一段程序,实现进程的管道通信。使用系统调用pipe( )建立一条管道线;两个进程P1和P2分别向管道各写一句话:Child 1 is sending a message! Child 2 is sending a message! 而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。要求父进程先接收子进程P1发来的消息,然后再接收子进程P2发来的消息。 实验源程序及报告: (1)、进程的创建 #include int main(int argc, char *argv[]) { int pid1,pid2; /*fork first child process*/ if ( ( pid1=fork() ) < 0 ) { printf( "ProcessCreate Failed!"); exit(-1); }

操作系统实验三进程的创建

操作系统 实验报告 哈尔滨工程大学 软件学院

第一讲实验环境的使用 一、实验概述 1. 实验名称 进程的创建 2. 实验目的 练习使用EOS API函数CreateProcess创建一个进程,掌握创建进程的方法,理解进程和程序的区别。 调试跟踪CreateProcess函数的执行过程,了解进程的创建过程,理解进程是资源分配的单位。 3. 实验类型(验证、设计) 验证 4. 实验内容

二、实验环境 操作系统:windows xp 编译环境:OS Lab 语言:汇编语言、C语言 三、实验过程(每次实验不一定下面6条都写,根据实际情况定) 1.设计思路和流程图

main函数流程图 2. 需要解决的问题及解答 (1)在源代码文件NewTwoProc.c提供的源代码基础上进行修改,要求使用hello.exe同时创建10个进程。提示:可以使用PROCESS_INFORMATION类型定义一个有10个元素的数组,每一个元素对应一个进程。使用一个循环创建10个子进程,然后再使用一个循环等待10个子进程结束,得到退出码后关闭句柄。 答:后文中,有此题解决方案。 尝试根据之前对PsCreateProcess函数和PspCreateProcessEnvironment函数执行过程的跟踪调试,绘制一幅进程创建过程的流程图。

PspCreateThread创建 了进程的主线程 结束 (3)在PsCreateProcess函数中调用了PspCreateProcessEnvironment函数后又先后调用了PspLoadProcessImage和PspCreateThread函数,学习这些函数的主要功能。能够交换这些函数被调用的顺序吗?思考其中的原因。 答:PspCreateProcessEnvironment 的主要功能是创建进程控制块并且为进程创建了地址空间和分配了句柄表。PspLoadProcessImage是将进程的可执行映像加载到了进程的地址空间中。PspCreateThread创建了进程的主线程。这三个函数被调用的顺序是不能够改变的就向上面描述的加载可执行映像之前必须已经为进程创建了地址空间这样才能够确定可执行映像可以被加载到内存的什么位置在创建主线程之前必须已经加载了可执行映像这样主线程才能够知道自己要从哪里开始执行,执行哪些指令。因此不能交换他们的顺序。 3.主要数据结构、实现代码及其说明 主要定义一个有10个元素的数组,每一个元素对应一个进程。使用一个循环创建10个子进程,然后再使用一个循环等待10个子进程结束,得到退出码后关闭句柄 4.源程序并附上注释 #include "EOSApp.h" // // main 函数参数的意义: // argc - argv 数组的长度,大小至少为1,argc - 1 为命令行参数的数量。 // argv - 字符串指针数组,数组长度为命令行参数个数+ 1。其中argv[0] 固定指向当前 // 进程所执行的可执行文件的路径字符串,argv[1] 及其后面的指针指向各个命令行 // 参数。

WINDOWS系列操作系统常见进程列表(精华)

WINDOWS系列操作系统常见进程列表(精华) 下面是系统的进程列表 最基本的系统进程(也就是说,这些进程是系统运行的基本条件,有了这些进程,系统就能正常运行) smss.exe session manager csrss.exe 子系统服务器进程 winlogon.exe 管理用户登录 services.exe 包含很多系统服务 lsass.exe 管理 ip 安全策略以及启动 isakmp/oakley (ike) 和 ip 安全驱动程序。(系统服务) 产生会话密钥以及授予用于交互式客户/服务器验证的服务凭据(ticket)。(系统服务) svchost.exe 包含很多系统服务 svchost.exe spoolsv.exe 将文件加载到内存中以便迟后打印。(系统服务) explorer.exe 资源管理器 internat.exe 托盘区的拼音图标 附加的系统进程(这些进程不是必要的,你可以根据需要通过服务管理器来增加或减少) mstask.exe 允许程序在指定时间运行。(系统服务) regsvc.exe 允许远程注册表操作。(系统服务) winmgmt.exe 提供系统管理信息(系统服务)。 inetinfo.exe 通过 internet 信息服务的管理单元提供 ftp 连接和管理。(系统服务) tlntsvr.exe 允许远程用户登录到系统并且使用命令行运行控制台程序。(系统服务) 允许通过 internet 信息服务的管理单元管理 web 和 ftp 服务。(系统服务) tftpd.exe 实现 tftp internet 标准。该标准不要求用户名和密码。远程安装服务 的一部分。(系统服务) termsrv.exe 提供多会话环境允许客户端设备访问虚拟的 windows 2000 professional 桌面会话以及运行在服务器上的基于 windows 的程序。(系统服务) dns.exe 应答对域名系统(dns)名称的查询和更新请求。(系统服务) 以下服务很少会用到,上面的服务都对安全有害,如果不是必要的应该关掉 tcpsvcs.exe 提供在 pxe 可远程启动客户计算机上远程安装 windows 2000 professional 的能力。(系统服务) 支持以下 tcp/ip 服务:character generator, daytime, discard, echo, 以及 quote of the day。(系统服务) ismserv.exe 允许在 windows advanced server 站点间发送和接收消息。(系统服 务) ups.exe 管理连接到计算机的不间断电源(ups)。(系统服务) wins.exe 为注册和解析 netbios 型名称的 tcp/ip 客户提供 netbios 名称服务。(系统服务)

计算机操作系统进程调度实验报告

计算机操作系统进程调度 实验报告 This manuscript was revised on November 28, 2020

操作系统实验题:设计一若干并发进程的进程调度程序 一、实验目的 无论是批处理系统、分时系统还是实时系统,用户进程数一般都大于处理机数,这将导致用户进程互相争夺处理机。这就要求进程调度程序按一定的策略,动态地把处理及分配给处于就绪队列中的某一进程,以使之执行。进程调度是处理机管理的核心内容。本实验要求采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法编写和调试一个简单的进程调度程序。通过本实验可以加深理解有关进程控制块、进程队列的概念。并体会了优先数和先来先服务调度算法的具体实施办法。 二、实验要求 用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解. 三、实验内容 进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法(将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,并按照先来先服务的方式进行调度处理)。 每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。 进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。 就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。 如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。

操作系统课后习题答案 2 进程答案

习题2 进程、线程管理 一、选择题 题号 1 2 3 4 5 6 7 8 9 10 答案 B B D C D C A B D C 题号 11 12 答案 A A 二、综合题 2、答:在多道程序环境下,允许多个程序并发执行,这就导致了在操作系统中引入了“进 程”。进程是随着操作系统中分时思想的提出而引出的。进程是一个可并发执行的具有 独立功能的程序在某个数据集合的一次执行过程,它是操作系统进行资源分配和保护的 基本单位。 ①进程和程序的最大区别就是进程是程序的一次执行过程,它是一个动态概念。程序 是以文件形式存放在磁盘上的代码序列,它是一个静态概念。 ②进程能够并发执行。在同一段时间内,并发执行的若干进程共享一个处理机,各个 进程按照不同的推进速度运行。进程状态及其转换可以很好地描述并发执行进程的执行过 程。

③进程是计算机系统资源分配的基本单位,程序不能作为一个独立单位运行和申请系 统资源。 ④进程由含有代码和数据的用户地址空间、进程控制块和执行栈区等部分组成,而程 序只由静态代码组成。 ⑤进程和程序之间是多对多的关系。一个程序可被多个进程共用,一个进程在其活动 中又可调用若干个程序。 2、答: 原语是由若干条机器指令组成的、用于完成一定功能的一个过程。原语不可分割,其执 行期间不充许被中断,要么从头到尾执行一遍,要么全不执行。原语的特征保证其在执行过 程中不受外界因素的影响。 原语的一般实现方法是以系统调用的方式提供原语接口,原语在执行过程中采用屏蔽中断的 方式来保证其不能被中断。原语常驻内存,只在核心态下运行。通常情况下,原语只提供给 系统进程或系统服务器使用。 3、答: 传统操作系统通过进程的并发执行提高了系统资源利用率和作业吞

操作系统进程创建及通信实验报告

武汉工程大学计算机科学与工程学院 《操作系统》实验报告[Ⅰ]

一、实验目的 创建进程,实现进程消息通信和共享内存通信,了解进程的创建、退出和获取进程信。了解什么是映像文件、管道通信及其作用,掌握通过内存映像文件和管道技术实现进程通信。 二、实验内容 本例用三种方法实现进程通信,仅用于示例目的,没有进行功能优化。 1、创建进程A和B后,在进程A中输入一些字符,点“利用 SendMessage发送消息”按钮可将消息发到进程B。 2、在进程A中输入一些字符,点“写数据到内存映像文件”按钮, 然后在进程B中点“从内存映像文件读数据”按钮可收到消息。其中在点“写数据到内存映像文件”时,要求创建映像文件,B进程在印象文件中读取数据。 3、先在进程B中点“创建管道并接收数据”按钮,然后在进程A 中输入一些字符,点“写数据到管道文件”按钮可将消息发到进程B。管道是连接读/写进程使他们进行通信的一个共享文件,目的是更好地实现进程间的通信。 三、实验思想 这次试验最主要的内容和核心思想就是学会创建进程并实现进程间的简单通信、创建映像文件和创建管道文件来通信,后两者是实现进程通信的高级通信机制中的两种。. 创建一个程序A和程序B,其中程序A和B各有一个主窗体,A主窗体上要求可以实现创建进程B(即调用函数B)、结束进程B、关闭进程A、向进程B发送数据、创建映像文件、创建管道文件等功能,进程B要求有从映像文件读取数据、创建管道并接收数据、结束进程B功能。最终让A、B进程相互通信。

四、设计分析: 首先设得设计A、B两个程序的操作界面,然后编写各个功能模块。对于A 程序窗体,在“利用SendMessage发送消息”按钮的消息响应函数中,主要是利用Windows API函数CWnd::FindWindow来找到接收消息的窗体,即进程B,找到进程B后,利用这个函数返回的窗体指针的SendMessage函数来发送消息。在“写数据到内存印象文件”按钮的消息响应函数中,主要是利用函数CreateFileMapping来创建一个印象文件,这个函数返回的是这个印象文件的句柄,然后将这个句柄和要发送的消息字符串传递到函数sprintf中,就可以所要发送的消息写入印象文件,在B程序窗体中有个“从内存印象文件读数据”按钮,在这个按钮的消息响应函数中读取父进程所创建的印象文件中的数据就可以实现通信了。在B程序窗体按钮“写数据到管道文件”的消息响应函数中,不能直接将要发送的消息发送到管道文件,因为管道必须先由子进程通过函数CreateNamedPipe创建,只有待子进程创建好管道后父进程才能根据管道创建管道文件,将消息写入管道文件并及时发送给子进程。而且这个管道只能使用一次,即每次发送完消息后那个管道不能在使用了,必须再由子进程创建一个管道,A 进程才能再次创建管道文件并向其中写入消息。这个程序也不一定要MFC实现,还可以用其他的技术和语言实现,比如说Java、VB等,外表构架可以不一样,但核心技术都是一样的,只是不同的调用形式和调用方法,比如说在VB中,实现进程间的一般通信就是使用动态数据交换DDE,实现起来就比较简单,但是要创建映像文件和管道文件就比较繁琐,可以根据不同的需求采用不同的语言。 五、程序部分源代码: 1.“利用SendMessage发送消息”按钮中的主要代码 //找到接收消息的窗口(窗口名为Receiver) CString str="进程B"; CWnd *pWnd=CWnd::FindWindow(NULL,str); if(pWnd) { COPYDATASTRUCT buf; char * s=new char[m_Msg1.GetLength()]; //m_Msg1为CString类型的变量 s=m_Msg1.GetBuffer(0);

操作系统题—进程

1 并发进程失去了封闭性,是指(d) A 多个相对独立的进程以各自的速度向前推进 B 并发进程的执行结果与速度无关 C 并发进程执行时,在不同时刻发生的错误 D 并发进程共享变量,其执行结果与速度有关 2 当一个进程处于这样的状态(ab)时,称其为等待状态。 A 它正等着输入一批数据 B 它正等着协作进程的一个消息 C 它正等分给它一个时间片 D 它正等着进入内存 3.进程的属性包括(c)。 A 进程就是程序。或者说,进程是程序的另一种叫法。 B 一个被创建了的进程,在它消灭之前,在任何时刻总是处于3种基本状态之一。 C 多个不同的进程可以包含相同的程序。 D 一个处于等待队列的进程,即使进入其它状态,仍然被放在等待队列中。 E 两个进程可以同时处于运行状态。 4 判断正误 1)进程由进程控制块和数据集以及对该数据集进程操作的程序组成。(dui) 2)进程上下文是进程执行活动全过程的静态描述(dui) 3)并发是进程的不同表述,其原理相同。(cuo) 5.简答:比较进程和程序的区别 进程与程序是既有联系又相区别的两个概念。 1 联系。程序是构成进程的组成部分之一。一个进程的运行目标是执行它所对应的程序,如果没有程序,进程就失去了其实际存在的意义。从静态的角度看,进程是由程序、数据和PCB三部分组成的。 2 区别1)程序是指令的有序集合。它是一个静态概念,其本身没有任何运行的含义。而进程是程序在处理机上的一次执行过程,它是动态概念。程序可以作为一种软件长期保存,而进程是有一定生命期的,它能够动态的产生和消亡。2)进程与程序在结构上不同,进程由PCB、程序段、数据段三部分组成。 3)进程是一个能独立运行的单位,能与其它进程并发执行。4)进程是竞争计算机系统有限资源的基本单位,也是进行处理机调度的基本单位。同一程序运行于若干不同的数据集合上,它将属于若干个不同的进程。或者说,若干个不同的进程可以包含相同的程序。 6 简答:操作系统中为什么要引入进程的概念?OS在进程管理方面应做哪些工作? 程序的并发执行充分利用了系统资源,提高了系统的处理能力。但由于系统资源有限,并发执行必将导致资源共享和资源竞争。此时如果不按照特定的规则和方法进行资源竞争和共享,则执行结果不可避免的失去封闭性和可再现性,从而得到不正确或非预期的结果。所以我们需要一个能描述程序的执行过程且能用来共享资源的基本单位,这就是进程。应做工作:1)进程控制2)进程同步 3)进程通信4)进程调度 1在多进程的系统中,为了保证公共变量的完整性,各个进程应互斥进入临界区。所谓临界区是指(d)。 A一个缓冲区B一段数据区 C同步机制D一段程序 2一个进程是(c)。 A由协处理机执行的一个程序B.一个独立的程序+数据集 C.PCB结构与程序和数据的组合D.一个独立的程序 3信号量是一个初值为非负的整型变量,可在其上做加1和减1操作。(cuo只可以做P、V操作。) 4 已知一个求值公式(A2 +3B)/(B+5A),若A、B已经赋值,请画出该公式求值过程的前趋图。 6 试用用信号量机制描述两人下象棋的过程。 ?两人下象棋的过程可以概括为:一开始只能是“红先黑后”,以后两人要循环轮流走子,直至某 一方获胜或双方和棋为止。 ?这是个只有一个生产者和一个消费者的生产者——消费者问题,是个典型的“你等我,我也 等你”的问题。红方是总的前趋任务——生产者 进程,黑方是总的后继任务——消费者进程,但 由于下棋过程必须轮流走子,所以红黑双方的生产 者消费者身份会轮流改变。棋盘则是生产者与消费 者共享的缓冲。 ?要求:只描述对弈过程,对棋盘的访问不做描述。二人对弈过程是个纯粹的同步过程 ?①所用信号量设置如下: ?Ⅰ)同步信号量hei,初值为1,表示黑方已走子,开始时可使红方先行不受阻。 ?Ⅱ)同步信号量hong,初值为0,表示红方

操作系统进程控制

深圳大学实验报告课程名称:操作系统 实验项目名称:进程控制 学院:计算机与软件学院 专业:软件工程 指导教师: 报告人:学号:班级: 实验时间: 实验报告提交时间: 教务处制

一、实验目的与要求: 实验目的:通过进程的创建,撤销和运行加深对进程概念和进程并发执行的理解,明确进程与程序之间的区别. 实验要求: 1.掌握在Windows中编程,在CYGWIN中编译运行的方法 2.阅读例程,理解fork(),execl(),exit(),getpid()和waitpid()的功能和用法 3.运行例程,分析例程中关键代码的功能,给出运行结果并对运行结果进行分 析说明. 4.模仿例程,编写一段程序实现以下功能: a)父进程使用系统调用fork()创建两个子进程 b)各个子进程显示和输出一些提示信息和自己的进程的标识符 c)父进程显示进程的ID和一些提示信息,然后调用waitpid()等待多个子进 程结束,并在子进程结束后显示输出提示信息表示程序结束 5.父进程创建多个(3个以上)进程并发运行,控制好各个子进程输出自己的进 程标识符和一些提示信息,对程序运行结果进行分析说明.观察各个子进程并发执行的顺序,输出的结果是否与设想中的顺序不同,并分析原因. 附加:分析父子进程资源共享的关系,在父进程中定义的变量能否被子进程使用?在特定位置定义才能使用还是所有位置都可以?子进程定义的变量,父进程能否使用?父进程如何强行关闭子进程? 二、方法、步骤:(说明程序相关的算法原理或知识内容,程序设计的思路和方法,可以 用流程图表述,程序主要数据结构的设计、主要函数之间的调用关系等)实验通过fork()函数创建子进程,父进程再通过waitpid()函数调用已创建的子进程,通过父进程和子进程输入自身的标识码来区分正运行的进程是子进程还是父进程。其中,当父进程通过fork()创建一个子进程后,会返回子进程的标识码(PID),而在新建立的子进程中返回0。

操作系统作业2 进程和进程通信

实验二进程和进程通信 实验报告 (一)实验目的 ?通过使用进程和进程通信方面的系统调用的,加深理解有关进程方面的基本概念。 通过实验对进程有进一步的感性认识,掌握系统V的IPC机制。 (二)实验题目 ?1.设计一个程序,创建一个子进程,使父子进程合作,协调地完成某一功能。要 求在该程序中还要使用进程的睡眠、进程图象改换、父进程等待子进程终止、信号的设置与传送(包括信号处理程序)、子进程的终止等有关进程的系统调用。 ?2.利用UNIX的消息通信机制、共享内存机制(要用信号灯实施进程间的同步和 互斥)实现两个进程间的数据通信。具体的通信数据可从一个文件读出,接收方进程可将收到的数据写入一个新文件,以便能判断数据传送的正确性(对文件操不熟悉的同学可不必通过读写文件,只要键盘输入和输出至屏幕进行比较即可)。(蓝字部分对一般同学不作要求) (三)实验报告要求 ?要求在实验室当场调试完成,经老师检查通过,登记,实验报告可免做。 ?对于因特殊情况,不能到实验室上机的同学,可在自己的Linux机器上机,但要求 写实验报告,包括题目、数据结构的说明,画出程序框图,在源程序中加入注释,说明程序的测试方法和测试结果,以及实验总结或体会。 ?在实验报告中要有一幅Linux系统运行的截图,截图中要注释实验者的姓名或学号。 实验报告不要做压缩文件。 ?为了截图,可以建立以学号为用户名的帐号,或在命令行中输入姓名或学号(会显 示出错,没有关系),或在程序加入注释,再对其截图。 ?至少要完成一道实验题。 一、运行程序 (一)、数据结构说明和程序框图 1、数据结构说明 main()函数:子进程的创建都是在main()函数里面; signalfun(),是信号SIGUSR1对应的处理函数; writetofile函数,是对一个文件写如一定的内容的函数; readfromfile,是从一个文件里面读取内容的函数。 2、程序框图如下:

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