计算机操作系统-OS实验二-PPT文档资料
操作系统课件os02进程控制-文档资料
原子操作在管态下执行,常驻内存。
2.2.1 进程的创建——进程树
A
B
C
D
E
F
G
H
I
J
K
L
M
引起创建进程的事件
用户登录。 作业调度。 提供服务。 应用请求。
进程的创建
调用进程创建原语Create( )按下述步骤创建一个新进程: 1. 申请空白PCB。 2. 为新进程分配资源。 3. 初始化进程控制块:初始化标识信息、初始化处理机状态
4 进程控制信息
① 程序和数据的地址,指进程的程序和数据所在的内存或 外存地(首)址
② 进程同步和通信机制,指实现进程同步和进程通信时必 需的机制;
③ 资源清单,即一张列出了除CPU以外的、进程所需的全 部资源及已经分配到该进程的资源的清单;
④ 链接指针,它给出了本进程(PCB)所在队列中的下一个进 程的PCB的首地址。
挂起原语的执行过程是: 1. 检查被挂起进程的状态
• 若处于活动就绪状态,便将其改为静止就绪; • 对于活动阻塞状态的进程,则将之改为静止阻塞。 2. 把该进程的PCB复制到某指定的内存区域。 3. 若被挂起的进程正在执行,则转向调度程序重新调度。
进程的激活过程
系统将利用激活原语active( )将指定进程激活。 1. 将进程从外存调入内存 2. 检查该进程的现行状态,若是静止就绪,便将之改为活
…
就绪索引表 …
… 阻塞索引表1
PCB表 PCB1 PCB2 PCB3 PCB4 PCB5 PCB6 … … PCBn
2.2 进程控制
进程控制是进程管理中最基本的功能。 进程控制任务:
OS实验二
实验二进程管理实验目的通过进程的创建、撤销和运行加深对进程概念和进程并发执行的理解,明确进程与程序的区别。
实验内容1、了解系统调用fork()、exec()、exit()和waitpid()的功能和实现过程。
2、编写一段程序,使用系统调用fork()创建两个子进程。
当此程序运行时,在系统中有一个父进程和两个子进程活动。
让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和“c”。
试观察记录屏幕上的显示结果,并分析原因。
3、编写一段程序,使用系统调用fork()来创建一个子进程,子进程通过系统调用exec()更换自己的执行代码,显示新的代码“new program.”后,调用exit()结束。
而父进程则调用waitpid()等待子进程结束,并在子进程结束后显示子进程的标识符,然后正常结束。
实验指导一、所涉及的系统调用1、getpid在2.4.4版内核中,getpid是第20号系统调用,其在Linux函数库中的原有用到pid_t类型,pid_t类型即为进程ID的类型。
事实上,在i386架构上(就是我们一般PC计算机的架构),pid_t类型是和int类型完全兼容的,我们可以用处理整形数的方法去处理pid_t类型的数据,比如,用"%d"把它打印出来。
标识符都不相同。
2、fork系统调用格式:pid=fork( )fork( )返回值意义如下:0:在子进程中,pid变量保存的fork( )返回值为0,表示当前进程是子进程。
>0:在父进程中,pid变量保存的fork( )返回值为子进程的id值(进程唯一标识符)。
-1:创建失败。
如果fork( )调用成功,它向父进程返回子进程的PID,并向子进程返回0,即fork( )被调用了一次,但返回了两次。
此时OS在内存中建立一个新进程,所建的新进程是调用fork( )父进程(parent process)的副本,称为子进程(child process)。
操作系统实验二PPT教学课件
Signal(mutex);
2020/12/0e9nd
4
2.在本程序中用于表现的图形界面说明:
在程序编译运行后会出现中间一个大的圆圈表 示公用的资源,上面一排五个矩形表示5个读者, 下面的五个矩形表示五个写入者。每个读者和写 入者都有3种状态,休息,等待和操作(读入或者 写入)分别用黑颜色,绿颜色,红颜色表示休息, 等待和操作。一旦操作者获得资源,可以进行读 或者写,我们就划一条从操作者中心到资源中心 的线,表示开始操作。
2020/12/09
5
3.演示界面:
2020/12/09
6
4.Win32程序框架:
InitApplication()函数
WinMain()函数
InitInstance()函数
结束返回
CreateOffscreen()函数 Renderscreen()函数
ReaderAndWriter() 函数
5个进程PhilosopherThread()
2020/12/09
3
Var mutex,wrt :Semaphore
Writeri:begin
Readcount: integer; Mutex:=wrt:=1;
Wait(wrt); 写数据集;
Readcount:=0;
Signal(wrt);
Parbegin
end
Readeri:begin
coend谢谢观看
Thank You For Watching
2020/12/09
8
Wait(mutex);
readcount:=readcount+1;
If readcount=1 then Wait(wrt);
os实验二
陕西师范大学操作系统实验报告实验日期: 2012/11/2实验名称:事件对象实验二事件对象一、实验目的:1.回顾系统进程、线程的有关概念,加深对Windows 2000线程的理解。
2.了解事件对象。
3.通过分析实验程序,了解管理事件对象的API。
4.了解在进程中如何使用事件对象。
5.了解父进程创建子进程的程序设计方法。
二、实验内容:1.调试实验(二)中的程序。
2.观察并分析程序。
三、实验步骤:步骤1:登录进入Windows 2000 Professional。
步骤2:在“开始”菜单中单击“程序”-“Microsoft Visual Studio 6.0”–“Microsoft Visual C++ 6.0”命令,进入Visual C++窗口。
步骤3:在工具栏单击“打开”按钮,在“打开”对话框中找到并打开实验源程序4-1.cpp 步骤4:单击“Build”菜单中的“Compile 4-1.cpp”命令,并单击“是”按钮确认。
系统对4-1.cpp进行编译。
步骤5:编译完成后,单击“Build”菜单中的“Build 4-1.exe”命令,建立4-1.exe可执行文件。
步骤6:在工具栏单击“Execute Program”(执行程序) 按钮,执行4-1.exe程序。
四、实验说明:1.本次实验展示了如何在进程间使用事件。
父进程启动时,利用CreateEvent() API 创建一个命名的、可共享的事件和子进程,然后等待子进程向事件发出信号并终止父进程。
两个进程在发出信号之后几乎立即终止。
2.创建事件时应该注意:(1)如果跨进程访问事件,必须对事件命名,在对事件命名的时候,要注意不要与系统命名空间中的其它全局命名对象冲突;(2)事件是否要自动恢复;(3)事件的初始状态设置。
五、描述运行结果(分行书写并从进程并发的角度对结果进行分析):运行结果:.1.event created2.chlid created3.Parent waiting on child.4.child process begining…...5.event signaled6.parent received the envent signaling from child7.Parent released.分析:程序从main()主函数开始,判断if 条件后,执行WaitForChild() 函数,所以出现运行结果1、2、3。
操作系统实验2指导电子课件共26页文档
2020/5/21
北京交通大学计算机学院 翟高寿
4
线程同步机制课题基本要求1
I. 基于给定银行账户间转账操作模拟代码作为 线程执行代码,在主线程中创建两个并发线 程,编程实现并观察程序运行结果和予以解 释说明。
II. 利用Windows互斥信号量操作函数解决上述 线程并发问题,并分析、尝试和讨论线程执 行体中有关信号量操作函数调用的正确位置。
LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId
&nPID1 / &nPID2 int nPID1=1, nPID=2;
);
2020/5/21
北京交通大学计算机学院 翟高寿
9
Windows线程编程知识3
等待线程函数原型
DWORD WaitForMultipleObjects(
系统时间获取函数原型 DWORD GetTickCount(VOID)
DWORD nCount,
CONST HANDLE *lpHandles,
BOOL fWaitAll, TRUE
hThread
DWORD dwMilliseconds HANDLE hThread[2];
);
INFINITE
2020/5/21
北京交通大学计算机学院 翟高寿
10
Windows线程编程知识4
北京交通大学计算机学院 翟高寿
2
线程同步机制
2020/5/21
北京交通大学计算机学院 翟高寿
3
线程同步机制实验目的
通过观察共享数据资源但不受控制的两个 线程的并发运行输出结果,体会同步机制 的必要性和重要性。然后利用现有操作系 统提供的同步机制编程实现关于该两个线 程的有序控制,同时要求根据同步机制的 Peterson软件解决方案尝试自己编程实现 同步机制和用于同一问题的解决,并基于 程序运行时间长短比较两种同步机制。
嵌入式操作系统μCOSII实验okPPT课件
μC/OS-II的任务管理
OSTaskCreate() 建立任务
OSTaskCreateExt() 建立任务扩展版本
OSTaskDel()
删除任务
OSTaskDelReq() 请求删除任务
OSTaskChangePri o()
OSTaskSuspend()
改变任务的优先级 挂起任务
OSTaskResume() 恢复任务
OSTaskStkChk() 堆栈检验
OSTaskQuery() 获得有关任务的信息 14
写在最后
经常不断地学习,你就什么都知道。你知道得越多,你就越有力量 Study Constantly, And You Will Know Everything. The More
You Know, The More Powerful You Will Be
第七章 嵌入式操作系统μCOS-II实验 7.1 μC/OS-II 移植实验 7.2 μC/OS-II 应用实验
1
7.1 μC/OS-II 移植实验 7.1.1实验目的 7.1.2实验设备 7.1.3实验内容 7.1.4实验原理 7.1.5实验操作步骤
2
7.1.1实验目的
了解μC/OS-II移植条件和内核基本结构。 掌握将μC/OS-II内核移植到ARM7处理器 上的方法和步骤。
15
结束语
感谢聆听
不足之处请大家批评指导
ease Criticize And Guide The Shortcomings
讲师:XXXXXX
XX年XX月XX日
16
3
7.1.2实验设备
硬件:Embest S3CEV40实验平台, Embest ARM标准/增强型仿真器套件, PC机。 软件:Embest IDE 2003集成开发环境, Windows 98/2000/NT/XP。
os实验要求ppt资料
利用程序设计语言编程,模拟实现请求分页系统中 Optimal、FIFO 和 LRU 页面置换算法。
(要求:进程分配的物理块数目不少于 第六页,编辑于星期五:十三点 五十分。
第二页,编辑于星期五:十三点 五十分。 (要求:进程分配的物理块数目不少于 5 个)
实理验解二 操作系编统程2原模. 理拟中进把程“的握互调斥在度”算和多法“个同步进” 程的涵并义。发执行过程中对临界资源访问时的必要约束 条件; (1)按要求独立完成 3 个实验内容
把握在多个进程并发执行过程中对临界资源访问时的必要约束条件;
第于五第页 14,周编完辑成3于;. 星期理五:解十操三点作五十系分统。 原理中 “互斥” 和 “同步” 的涵义。
分析比较各调度算法的基本思想及其优缺点。 实验三 编程模拟页面置换算法 (要求:等待调度的进程数目不少于 5 个) 于第14周完成;
(二)实验内容 把握在多个进程并发执行过程中对临界资源访问时的必要约束条件;
(二)实验内容
利用程序设计语言编程,模拟实现处理机调度中: 先来先服务、高优先权和时间片轮转调度算法。
(要求:等待调度的进程数目不少于 5 个)
第四页,编辑于星期五:十三点 五十分。
实验三 编程模拟页面置换算法
(一)实验目的
1. 理解请求分页系统的基本实现思想;
2. 掌握实现页面置换的 Optimal 、FIFO 和 LRU 算法基 本思想。
计算机操作系统 实验要求
第一页,编辑于星期五:十三点 五十分。
< 基本说明 >
(1)按要求独立完成 3 个实验内容
(2)程序检查在实验课上进行,最迟 于第14周完成;每个实验必须上 交一份实验报告
第二页,编辑于星期五:十三点 五十分。
《unix-os教学课件》unix操作系统实验二
可以使用nice和renice命令调整进程的优先级,nice用于设置新启动的进程的优先级,renice用于修改已经运行的进程的优先级。
理解进程调度的原理
Unix操作系统采用基于优先级的抢占式调度算法,当一个优先级高的进程正在运行时,如果有一个优先级更高的进程就绪,那么当前运行的进程将被强制停止,让高优先级的进程运行。
进程的优先级与调度
05
Unix操作系统实验二:网络配置
总结词
网络接口配置是Unix操作系统中实现网络连接的关键步骤,包括配置网络接口卡参数、IP地址和子网掩码等。
在进行网络接口配置时,需要选择合适的网络接口卡,并设置其参数,如中断号、I/O端口等。然后,需要配置IP地址和子网掩码,以便在局域网或广域网中与其他计算机进行通信。
多用户多任务
Unix支持多个用户同时登录和使用系统资源,能够高效地处理多个任务和进程。
安全稳定
Unix系统设计注重安全性,具有强大的权限管理和访问控制机制,能够保证系统的稳定性和数据的安全性。
高度可定制性
Unix系统可以根据用户需求进行高度定制,包括系统配置、桌面环境、应用程序等。
Unix操作系统的特点
进程的启动与终止
总结词
详细描述
总结词
详细描述
总结词
详细描述
掌握进程查看命令
可以使用ps命令、top命令和htop命令等查看当前运行的进程,这些命令可以显示进程的详细信息,如进程ID、CPU占用率、内存占用率等。
理解进程监控的意义
进程监控可以帮助我们了解进程的运行状态,及时发现异常进程并进行处理,保证系统的稳定性和安全性。
网络接口配置是Unix操作系统中实现网络连接的关键步骤,包括配置网络接口卡参数、IP地址和子网掩码等。
OS实验2
实验2:文件部分系统调用1、实验目的(1)文件部分系统调用;(2)通过系统调用实现文件的顺序读取,文件顺序写入,文件的追加,文件随机存取。
2、实现设备一台装有Windows操作系统和Linux机系统的微机或服务器。
3、实验方法与注意事项1)由于是以root用户工作的,权力很大,请不要在系统内做对系统或对其他用户不安全的事情。
2)要求每个同学登录后系统后,要在自己的家目录内容以自己(汉语拼音)名字,使用mkdir命令创建一个子目录。
以后所有工作都要在自己的目录内进行。
3)认真编写实验报告。
4、实验过程实验1:文件的创建与(追加)写入(1)令文件名为app.c,使用vi编辑器,编辑并输入此文件;(2)调通该程序,实现文件的创建、追加与顺序写入。
(3)编译方法: cc –o app app.c(4)执行办法:./app(5)观察文件内容:cat myfile(6)若编译有警告提示,请修改程序,使不再警告。
实验2:文件复制(1)令文件名为copy.c,使用vi编辑器,编辑并输入此文件;(2)调通该程序,实现文件的创建、追加与顺序写入;(3)编译方法: cc –o copy copy.c(4)执行办法: ./copy ifile ofile(5)搞清楚main(int argc,char *argv[])中argc和argv的意义及用法;(6)根据ifile和ofile文件的类属和权限等进行测试,以验证程序的正确性;(7)对于正常情况,观察文件内容,验证程序执行的结果。
或可使用cmp ifile ofile 以比较ifile与ofile的异同;(8)若编译有警告提示,请修改程序,使不再警告。
可以使用ls –l ifile ofile查看两个文件的大小,也可使用cmp ifile ofile 比较两者差别,也可直接使用cat命令查看文件的内容。
实验3:文件删除(1)令文件名为del.c,使用vi编辑器,编辑并输入此文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
};
Байду номын сангаас
sem_op>0:将sem_op加入到信号灯的值 中,并唤醒等待信号灯增加的进程;
arg.val = 1;
res = semctl(semid,0,SETVAL,arg);
semctl(semid,0,IPC_RMID,0)
•信号灯操作: int semop(int semid,struct sembuf *spos,int nspos) semid是要操作的信号灯集ID ; spos操作数组,nspos表明数组的个数 。 struct sembuf { short sem_num; /* 使用那一个信号灯 */ short sem_op; /* 进行什么操作 */ short sem_flg; /* 操作的标志,置为0;*/
线程撤消: void pthread_exit __P ((void *__retval)) __attribute__ ((__noreturn__)); 唯一的参数是函数的返回代码,只要 pthread_join中的第二个参数thread_return不是 NULL,这个值将被传递给thread_return。最 后要说明的是,一个线程不能被多个线程等 待,否则第一个接收到信号的线程成功返回, 其余调用pthread_join的线程则返回错误代码 ESRCH 。
/*IPC_CREAT表示不存在则创建*/
成功时返回信号灯的ID ,否则为-1。
•信号灯控制
int semctl(int semid,int semnum,int cmd,union semun arg)
semid是要操作的信号灯集ID ;
semnum是信号灯集中信号灯的编号;
cmd是操作的命令,常用SETVAL(设置信号量 的值)和IPC_RMID(删除信号灯) arg给cmd的参数。
参数: __thread指向返回线程标识符的指针 ;
__attr设置线程属性 ; __start_routine线程运行函数地址 ;
__arg运行函数的参数 。
当创建线程成功时,函数返回0, 若不为0则说明创建线程失败,常见的 错误返回代码为EAGAIN和EINVAL。 前者表示系统限制创建新的线程,例如 线程数目过多了;后者表示第二个参数 代表的线程属性值非法。创建线程成功 后,新创建的线程则运行参数三和参数 四确定的函数,原来的线程则继续运行 下一行代码。
实验二 Linux线程及信号灯
一、目的 了解并掌握Linux线程及信号灯。 二、要求 1、了解Linux线程与信号灯使用: (1) Linux线程 (2)Linux信号灯 (3)线程互斥 (4)线程同步
三、内容 1、熟悉Linux线程接口及连接; 2、了解Linux信号灯的编程; 3、编程模拟实现飞机售票; • 创建多个售票线程; • 已售票使用公用全局变量; • 创建互斥信号灯; • 对售票线程临界区施加P、V操作。
线程等待:等待一个线程的结束 int pthread_join __P ((pthread_t __th, void **__thread_return)); __th被等待的线程标识符, __thread_return为一个用户定义的指针, 它可以用来存储被等待线程的返回值。这个函 数是一个线程阻塞的函数,调用它的函数将一 直等待到被等待的线程结束为止,当函数返回 时,被等待线程的资源被收回。
4、编程模拟实现双线程单缓冲 区的合作; • 创建多个计算线程与输出线程; • 创建同步信号灯; • 缓冲区用全局公用数组变量; • 对计算线程与输出线程施加P、 V操作。
四、预备知识 1、线程接口 •线程创建
int pthread_create __P ((pthread_t *__thread, __const pthread_attr_t *__attr, void *(*__start_routine) (void *), void *__arg));
运行结果1 This is the main process. This is a pthread. This is the main process. This is the main process. This is a pthread. This is a pthread. 运行结果2 This is a pthread. This is the main process. This is a pthread. This is the main process. This is a pthread. This is the main process.
/* 线程示例*/
#include <stdio.h> #include <pthread.h> void thread(void) { int i; for(i=0;i<3;i++) printf("This is a pthread.\n"); } int main(void) { pthread_t id; int i,ret; ret=pthread_create(&id,NULL,(void *) thread,NULL); if(ret!=0){ printf ("Create pthread error!\n"); exit (1); } for(i=0;i<3;i++) printf("This is the main process.\n"); pthread_join(id,NULL); return (0); }
#gcc example1.c -lpthread -o example1
2、System V信号灯
•创建一信号灯集:
int semget(key_t key,int nsems,int semflg) key是一个关键字 ,为IPC_PRIVATE表明由系统 选用一个关键字;
nsems创建的信号灯个数,信号灯编号为0到 nsems-1; semflg创建的权限标志,如IPC_CREAT|0666;