观察进程的并发性

简介: 通过创建子进程,观察父子进程的并发执行过程 ,加深对操作系统进程概念和进程并发特性的理解

观察进程的并发性

1. 创建资源

开始实验之前,您需要先创建实验相关资源。

  1. 在实验室页面,单击创建资源
  2. (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。

说明:资源创建过程需要3~5分钟视资源不同开通时间有所差异,ACK等资源开通时间较长。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。

实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。

资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息


2. 预习内容

  1. 进程创建的基础知识

程序是存储在磁盘上的,程序被加载到内存中开始运行叫做进程

一个程序可以多次被加载,生成多个进程(比如登录多个QQ),进程就是处于活动状态的计算机程序。

一个进程可以被另一个进程创建,创建者叫父进程,被创建者叫子进程,子进程被父进程启动后在操作系统的调用下同时运行。

当子进程先于父进程结束,子进程会向父进程发送SIGCHLD信号,此时父进程应该去回收子进程的相关资源,如果没有回收,那么子进程就会变成僵尸状态。

僵尸进程:该子进程已经死亡,但它的父进程没有立即回收它的相关资源,该进程就进入僵尸状态。

父进程先于子进程结束,子进程就变成了孤儿进程,孤儿进程就会被孤儿院(即init守护进程,init的进程ID永远是1)领养,init就是孤儿进程的父进程。

2.进程相关的系统调用

(1) pid_t fork(void):创建一个新的进程。返回值:一次调用两次返回,子进程返回0,父进程返回子进程ID,创建进程失败,返回-1.

注意:通过fork创建的子进程,会拷贝父进程的(数据段、bss段、堆、栈、I/O流缓冲区等)数据段,与父进程共享代码段。可以根据返回值的不同,让父子进程进入不同的分支,执行不同的代码。

(2)int wait(int *stat_loc):如果有退出的子进程,则返回退出的子进程的状态;如果没有任何子进程在运行,则返回错误。如果当前有子进程正在运行,则函数会一直阻塞直到一个子进程退出。

(3) pid_t waitpaid(pid_t pid, int *stat_loc, int options):类似于函数wait,但允许用户等待某个进程组的特定进程,并可以设置等待选项。

(4)int nice(int inc):改变当前进程优先级。在调用进程的nice值上添加参数指定的值。较高的nice值意味值较低的优先级,只有超级用户才可指定负增量--即提升优先级。

3.使用gcc编译器

简单写个test.c如下,使用gcc test.c -o test,将test.c编译,并生成可执行文件test(若不指定-o 文件名,则默认生成a.out),输入./test执行程序。


3. 实验内容及步骤

本次实验的编程需要独自完成。

1.进程的创建。编制一段程序,使用系统调用fork()创建两个子进程,在此程序运行时,系统中就有一个父进程和两个子进程在活动。

1)让每一个进程在屏幕上显示一个字符:父进程显示字符a,两个子进程分别显示字符b和子符c

2)试观察、记录并分析屏幕上进程调度和并发执行的情况。

2.若在程序中使用系统调用nice()来改变各进程的优先级,会出现什么现象?


4. 实验总结

1)系统调用fork()是怎样创建进程的?

2)当首次调用新创建的子进程时,其入口在哪里?

3)分析进程调度和进程并发执行的关系?

4)提交源程序清单,并附加流程图与注释。

实验链接:https://developer.aliyun.com/adc/scenario/e008b37f71b54c26a7189dd0dad51dcc

相关文章
|
5月前
|
供应链 安全 数据处理
操作系统高级议题:并发控制与进程互斥技术
操作系统高级议题:并发控制与进程互斥技术
102 0
|
6月前
|
Shell
shell中并发执行多个进程
shell中并发执行多个进程
622 4
|
11月前
进程并发装饰器
进程并发装饰器
57 0
|
4月前
|
安全 Python
告别低效编程!Python线程与进程并发技术详解,让你的代码飞起来!
【7月更文挑战第9天】Python并发编程提升效率:**理解并发与并行,线程借助`threading`模块处理IO密集型任务,受限于GIL;进程用`multiprocessing`实现并行,绕过GIL限制。示例展示线程和进程创建及同步。选择合适模型,注意线程安全,利用多核,优化性能,实现高效并发编程。
69 3
|
4月前
|
Python
解锁Python并发新世界:线程与进程的并行艺术,让你的应用性能翻倍!
【7月更文挑战第9天】并发编程**是同时执行多个任务的技术,提升程序效率。Python的**threading**模块支持多线程,适合IO密集型任务,但受GIL限制。**multiprocessing**模块允许多进程并行,绕过GIL,适用于CPU密集型任务。例如,计算平方和,多线程版本使用`threading`分割工作并同步结果;多进程版本利用`multiprocessing.Pool`分块计算再合并。正确选择能优化应用性能。
35 1
|
2月前
|
网络协议 C语言
C语言 网络编程(十三)并发的TCP服务端-以进程完成功能
这段代码实现了一个基于TCP协议的多进程并发服务端和客户端程序。服务端通过创建子进程来处理多个客户端连接,解决了粘包问题,并支持不定长数据传输。客户端则循环发送数据并接收服务端回传的信息,同样处理了粘包问题。程序通过自定义的数据长度前缀确保了数据的完整性和准确性。
|
2月前
|
C语言
C语言 网络编程(八)并发的UDP服务端 以进程完成功能
这段代码展示了如何使用多进程处理 UDP 客户端和服务端通信。客户端通过发送登录请求与服务端建立连接,并与服务端新建的子进程进行数据交换。服务端则负责接收请求,验证登录信息,并创建子进程处理客户端的具体请求。子进程会创建一个新的套接字与客户端通信,实现数据收发功能。此方案有效利用了多进程的优势,提高了系统的并发处理能力。
|
3月前
|
算法 Java
JUC(1)线程和进程、并发和并行、线程的状态、lock锁、生产者和消费者问题
该博客文章综合介绍了Java并发编程的基础知识,包括线程与进程的区别、并发与并行的概念、线程的生命周期状态、`sleep`与`wait`方法的差异、`Lock`接口及其实现类与`synchronized`关键字的对比,以及生产者和消费者问题的解决方案和使用`Condition`对象替代`synchronized`关键字的方法。
JUC(1)线程和进程、并发和并行、线程的状态、lock锁、生产者和消费者问题
|
2月前
|
数据采集 消息中间件 并行计算
进程、线程与协程:并发执行的三种重要概念与应用
进程、线程与协程:并发执行的三种重要概念与应用
56 0

热门文章

最新文章

相关实验场景

更多