进程

进程包含PCB(进程控制块),数据和程序

进程和线程区别?

  1. 进程是系统资源分配的最小单位,线程是CPU调度的最小单位(程序执行的最小单位)。
  2. 一个进程可以包含多个线程但至少有一个线程,一个线程只能属于某一个进程。
  3. 不同进程间数据很难共享,同一进程的线程间很容易进行数据共享。
  4. 进程使用的内存地址可以上锁,一个线程使用完共享数据后另一个线程再使用。
  5. 线程才是操作系统真正要运行的东西,进程只是一个容器

进程间通信

进程间为什么需要通信?

  1. 数据传输:一个进程将数据传输给另一个进程
  2. 资源共享:一个进程和另一个或一组进程共享某些资源
  3. 信号传递:一个进程向另一个或一组进程传递某些信号,通知某个事件的发生
  4. 进程控制:一个进程控制另一个进程的运行,如debug

进程间通信的原理

每个进程都有自己的内存空间,该空间里的数据无法被其他进程看见,以此实现进程间的隔离。进程间通信需要在内核中开辟一块缓冲区,一个进程将自己空间中的数据写入内核开辟的缓冲区,另一个进程进行读取。

进程间通信的方式

管道

基于字节流,实质上是一个文件,一端对其进行读,另一端进行写。管道的生命周期随进程,进程结束,管道就消失。

信号量

通过信号量控制不同进程对同一共享资源的访问,当有进程使用资源时信号量-1(对应操作为P操作),当进程释放资源时信号量+1(对应操作为V操作。

文件共享

效率最高的一种方式,一个进程将数据输入到共享内存,另一个进程从共享内存读取数据。
共享内存是在物理地址空间上的一个内存,进程可以通过页表找到共享内存,将数据直接写入,不需要经过内核进行文件的拷贝。

套接字

套接字除可用于进程间通信外,也可用于不同设备间通信。

消息队列

基于消息,一个进程进行消息的读,另一个进程进行消息的写。生命周期随内核,需通过命令进行中断。

进程被挂起的情况

  1. 进程太多
  2. 进程死锁
  3. 用户请求
  4. 系统中断

线程间通信

线程间通信主要是为了实现多线程的同步。可以使用全局变量,锁机制,信号量,信号等几种方式进行通信。
锁机制包括互斥锁,条件变量和读写锁。
互斥锁:以排他的方式,防止数据被修改。
条件变量:线程被阻塞,只有满足某些条件才可继续运行。
读写锁:多个线程可共享数据,但对读是互斥的。

线程间共享和独占资源

共享资源

  1. 代码段
  2. 数据段(如全局变量)
  3. 打开的文件描述符
  4. 信号的处理

独占资源

  1. 虚拟机栈和本地方法栈
  2. 程序计数器:为了在多线程操作中保存线程当前的执行状态,便于状态恢复
  3. 线程id
  4. 错误返回码
    临界区是指访问临界资源的程序代码

用户态和系统态

进程有两种模式,用户态和系统态,一般用户编写的程序在用户态下工作,当执行中断或系统函数调用时,切换到系统态。

进程状态

进程包含三种状态: 就绪态,运行态,阻塞态。
当进程被系统调用时由就绪态进入运行态,当缺少时间片时由运行态进入就绪态。当发生中断或者需要某个事件的发生时从运行态进入阻塞态,当需要的事件发生时由阻塞态进入就绪态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值