进程管理知识点总结

操作系统的概念

在这里插入图片描述

什么是操作系统?

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

现代操作系统的特征

  1. 并发性:进程
  2. 共享性:资源(互斥/同步)
  3. 虚拟性:虚拟,spooling
  4. 异步性:进程执行不可预测

操作系统的功能

  1. 处理器管理
  • 进程创建与删除
  • 进程同步
  • 进程通信
  • 死锁处理
  • CPU调度
  • 作业调度
  1. 内存管理
  • 内存调度分配、保护、扩充管理
  1. 设备管理
  • 通道、控制器、输入输出设备的分配与管理
  1. 文件管理
  • 文件创建与删除
  • 在永久性磁盘上存取文件
  • 文件共享、保密、保护
  1. 用户接口
  • 程序级别
  • 作业级别

多道程序设计与多重处理系统的区别在这里插入图片描述

多道批处理系统与分时系统的区别在这里插入图片描述

操作系统的界面

在这里插入图片描述

系统调用处理过程

在这里插入图片描述

系统调用与一般调用在这里插入图片描述

作业(job)

在这里插入图片描述

作业说明书

在这里插入图片描述

批处理系统的作业管理在这里插入图片描述

为了对作业进行有效的控制和管理,作业进入系统后,系统为每个作业配置一个作业控制块(JCB) ,用于记录作业的情况,并将所有作业的作业控制块组织成作业控制块表或队列。

作业控制块(JCB)在这里插入图片描述

批处理作业的状态及其转换在这里插入图片描述

作业的四个状态

在这里插入图片描述

输入输出方式(2)

  • SPOOLING系统(可将物理虚拟为多个逻辑设备)
    在这里插入图片描述
  • 网络联机

作业调度的功能

在这里插入图片描述

作业调度性能指标

在这里插入图片描述

作业调度算法在这里插入图片描述

短作业优先调度算法有剥夺方式和非剥夺方式。

进程和程序的区别

在这里插入图片描述

进程和作业的区别

在这里插入图片描述

程序、进程、作业

在这里插入图片描述

进程控制块PCB

在这里插入图片描述

CPU如何进行进程切换在这里插入图片描述

进程上下文(context)在这里插入图片描述在这里插入图片描述在这里插入图片描述

进程空间

在这里插入图片描述在这里插入图片描述在这里插入图片描述

进程的状态

在这里插入图片描述在这里插入图片描述

进程的状态

在这里插入图片描述

进程队列(Queue)在这里插入图片描述在这里插入图片描述

进程控制

在这里插入图片描述在这里插入图片描述

原语

在这里插入图片描述

线程(Thread)的概念在这里插入图片描述在这里插入图片描述

线程和进程的区别

在这里插入图片描述

线程的分类

在这里插入图片描述

临界区

在这里插入图片描述在这里插入图片描述在这里插入图片描述

进程互斥

在这里插入图片描述

并发进程互斥协调准则在这里插入图片描述

信号量(semaphore)在这里插入图片描述

P、V原语

在这里插入图片描述

进程同步

在这里插入图片描述

信号量分类

在这里插入图片描述
在这里插入图片描述

生产者消费者问题

在这里插入图片描述

P、V原语实现同步

在这里插入图片描述在这里插入图片描述

死锁(Deadlock)

在这里插入图片描述在这里插入图片描述

死锁的必要条件

在这里插入图片描述

死锁的排除方法

在这里插入图片描述

进程间通信

在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
(1)进程的软中断通信 #include #include #include #include int wait_flag; void stop(); main( ) { int pid1, pid2; // 定义两个进程号变量 signal(2,stop); // 或者 signal (14,stop); while((pid1 = fork( )) == -1); // 若创建子进程1不成功,则空循环 if(pid1 > 0) { // 子进程创建成功,pid1为进程号 while((pid2 = fork( )) == -1); // 创建子进程2 if(pid2 > 0) { wait_flag = 1; //sleep(1); // 父进程等待5秒 kill(pid1,SIGUSR1); // 杀死进程1 kill(pid2,SIGUSR2); // 杀死进程2 wait(0); wait(0); printf("\n Parent process is killed !!\n"); exit(0); // 父进程结束 } else { wait_flag = 1; signal(SIGUSR2,stop); // 等待进程2被杀死的中断号17 printf("\n Child process 2 is killed by parent !!\n"); exit(0); } } else { wait_flag = 1; signal(SIGUSR1,stop); // 等待进程1被杀死的中断号16 printf("\n Child process 1 is killed by parent !!\n"); exit(0); } } void stop() { wait_flag = 0; } (2)进程的管道通信 #include #include #include int pid1,pid2; // 定义两个进程变量 main( ) { int fd[2]; char OutPipe[100],InPipe[100]; // 定义两个字符数组 pipe(fd); // 创建管道 while((pid1 = fork( )) == -1); // 如果进程1创建不成功,则空循环 if(pid1 == 0) { lockf(fd[1],1,0); // 锁定管道 sprintf(OutPipe,"\n Child process 1 is sending message!\n"); write(fd[1],OutPipe,50); // 向管道写入数据 sleep(5); // 等待读进程读出数据 lockf(fd[1],0,0); // 解除管道的锁定 exit(0); // 结束进程1 } else { while((pid2 = fork()) == -1); // 若进程2创建不成功,则空循环 if(pid2 == 0) { lockf(fd[1],1,0); sprintf(OutPipe,"\n Child process 2 is sending message!\n"); write(fd[1],OutPipe,50); sleep(5); lockf(fd[1],0,0); exit(0); } else { wait(0); // 等待子进程1 结束 read(fd[0],InPipe,50); // 从管道中读出数据 printf("%s\n",InPipe); // 显示读出的数据 wait(0); // 等待子进程2 结束 read(fd[0],InPipe,50); printf("%s\n",InPipe); exit(0); // 父进程结束 } } }

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值