深入理解计算机操作系统学习笔记、二

本文深入解析了进程和线程的概念,阐述了它们之间的区别,包括资源拥有、系统开销和调度方式。详细介绍了进程间通信的六种方式,如管道、信号、消息队列、共享内存、信号量和套接字,以及线程间通信的主要机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程的定义

进程的经典定义定义是一个执行中的程序的实例。系统中的每一个程序都运行子啊一个进程的上下文中,上下文是有程序正确运行所需要的各种状态决定的,这个状态包括保存在内存中的代码和数据,通用寄存器中的内容,程序计数器,环境变量还有文件描述符。

每一次用户在shell里面输入一个程序的名字,运行程序的时候,shell就会创建一个进程,然后在这个进程的上下文中运行这个程序

进程和线程的区别

从拥有的资源来说:一个进程在执行过程中有独立的内存单元,所以一个进程崩溃之后,在保护模式下不会对其他进程有什么影响。线程是一个进程当中不同的执行路径,线程有自己的程序计数器、栈、和寄存器,但是没有单独的地址空间,如果一个线程死了,那么它的这个进程也死了。所以多进程的程序比多线程的程序健壮。不多多进程的程序缺点是进程之间相互切换消耗时间比较多。

从系统开销来说:进程和线程都是操作系统进行资源管理的方式,进程的每一次启动需要系统给它分配系统资源,对这个系统的压力较大,进程的系统开销比较大,线程是在进程内部的,开销比较小,线程只能属于一个进程并且访问这个进程的资源。线程的划分尺度比进程更细一些。 。

从系统的调度来说:进程是操作系统进行系统资源分配时候的基本单元,线程是CPU进行调度和分派的基本单元

进程间的通信方式

进程之间的通信的目的一般有三种:数据传输、消息通知和进程控制

  • 数据传输:一个进程想要把数据发送给另一个进程,或者多个进程之间要相互传输数据。
  • 消息通知:一个进程要向另一个进程或者几个进程发送消息,通知他们发生了什么事情。比如,子进程终止需要通知父进程
  • 进程控制:有些进程想要完全控制另一个进程的执行,比如Debug进程想要控制有些进程的执行。

LInux进程间通信的方式有6类:

  1. 管道pipe、流管道s_pipe和有名管道FIFO:
    • 匿名管道通信有两个限制,一个是半双工的通信,数据同一时间只能单向传输。二是只能在父进程和子进程之间使用
    • 有名管道,克服了匿名管道由于没名字只能亲缘关系的进程间通信的缺点。即使没有亲缘关系,进程之间也可以通过访问路径来相互通信。
    • 管道是特殊类型的文件,在满足先进先出的条件下就可以读写操作。有名管道是以磁盘文件的方式存在,能实现在本机上任意两个进程之间通信。
  2. 信号(signal):信号用于通知某个事件已经发生,主要用在进程之间同步或者同一个进程的多个线程之间同步。 信号事件的来源主要有两个:
    • 硬件来源:键盘上按ctrl + c退出,硬件异常比如无效的存储访问
    • 软件来源:比如调用kill函数
  3. 消息队列:消息队列是消息链表存放在内核当中,一般情况下只有在操作系统重启的时候才会被真正的被删除。
  4. 共享内存(shared memory):
    • (Why)设计共享内存的目的就是解决其他线程间通信方式效率低的问题。
    • (What)共享内存就是内核专门留了一块内存区域,如果几个进程需要访问,就把它映射到自己的私有地址空间,这样进程就可以直接读写这块内存不需要进行数据的拷贝,能大幅度提升效率
    • (How)由于多个进程使用同一块内存,所以需要依靠某种同步机制(比如信号量)来实现进程间的同步和互斥
  5. 信号量(semaphore):
    • (Why)为了控制多线程对共享数据的访问,实现进程同步
    • (What)信号量是一个计数器,对访问某个数据的进程记录
    • (How)信号量智能进行两种操作:等待和发送。
  6. 套接字(socket):套接字的特点是可以进行不同机器之间的进程通信。套接字是不同的主机之间进行通信的端点,他是双方进行通信的一种约定,用套接字中的相关函数来完成通信过程。

线程间通信

线程间通信的目的主要是为了线程同步,主要方式有几种

  1. 锁机制:包括互斥锁、条件变量、读写锁:互斥锁有排他性,防止数据被并发地修改。读写锁允许多个线程对共享数据同时读取,但是写操作是互斥的。
  2. 信号量机制:包括无名线程信号量和命名线程信号量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值