进程切换、等待与退出

一、进程切换

二、进程创建

Windows的API:CreatProcess

Unix进程创建系统调用:fork/exec:fork()把一个进程复制成两个进程、exec()用新程序来重写当前进程。

fork()的实现原理:fork执行的时候做了一个复制,复制完了之后给它一个新的ID,接着往下执行,父进程由于pid不等于0就执行父进程的内容,子进程由于pid等于0就执行exec函数的内容,将子进程内的数据和程序换掉。

二、进程的等待与退出

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个相对复杂的问题,需要详细的解释和代码实现。在这里我将提供一个基本的步骤和代码框架,但需要您自行根据具体情况进行修改和完善。 步骤: 1. 创建四个进程,使用fork()函数,其中两个进程使用sched_setscheduler()函数设置为实时进程,另外两个进程使用普通的进程调度器。 2. 在每个进程中创建两个线程,使用pthread_create()函数。每个线程中都需要进行中断睡眠、不可中断睡眠、暂停状态的切换测试。测试方法可以使用Linux内核提供的一些系统调用,如sleep()、nanosleep()、pause()等。 3. 在一个进程中测试进程退出过程,可以使用exit()函数来退出进程。 代码框架: ```c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h> #include <sched.h> // 定义线程函数,测试中断睡眠、不可中断睡眠、暂停状态的切换 void* test_thread(void* arg) { while(1) { // 中断睡眠 sleep(1); // 不可中断睡眠 while(1) { if(sleep(1) != 0) break; } // 暂停状态 pause(); } } // 定义进程函数,创建两个线程进行测试 void test_process() { pthread_t tid1, tid2; pthread_create(&tid1, NULL, test_thread, NULL); pthread_create(&tid2, NULL, test_thread, NULL); pthread_join(tid1, NULL); pthread_join(tid2, NULL); } int main() { pid_t pid1, pid2, pid3, pid4; // 创建进程1 pid1 = fork(); if(pid1 == 0) { // 设置实时调度器 struct sched_param param; param.sched_priority = 99; sched_setscheduler(0, SCHED_FIFO, &param); test_process(); exit(0); } // 创建进程2 pid2 = fork(); if(pid2 == 0) { // 设置实时调度器 struct sched_param param; param.sched_priority = 99; sched_setscheduler(0, SCHED_FIFO, &param); test_process(); exit(0); } // 创建进程3 pid3 = fork(); if(pid3 == 0) { test_process(); exit(0); } // 创建进程4 pid4 = fork(); if(pid4 == 0) { test_process(); exit(0); } // 等待子进程退出 waitpid(pid1, NULL, 0); waitpid(pid2, NULL, 0); waitpid(pid3, NULL, 0); waitpid(pid4, NULL, 0); return 0; } ``` 需要注意的是,以上代码仅提供了一个基本框架,具体实现需要根据具体情况进行修改和完善。例如,如果要进行实时调度器的设置和使用,需要了解Linux内核的实时调度器相关知识。如果要进行进程退出的测试,需要了解进程管理和信号处理相关知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值