操作系统相关

目录

1、进程与线程的区别

2、进程间通信方式


1、进程与线程的区别

进程是操作系统(OS)资源分配的基本单位,而线程是处理器(CPU)任务调度和执行的基本单位。
每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大,但相对比较稳定安全。
线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。线程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。
 

进程线程
描述操作系统(OS)资源分配的基本单位处理器(CPU)任务调度和执行的基本单位
资源线程共享本进程的资源如内存、I/O、cpu等,不利于资源的管理和保护进程之间的资源是独立的,能很好的进行资源管理和保护
健壮性多进程要比多线程健壮,一个进程崩溃后,在保护模式下不会对其他进程产生影响一个线程崩溃整个进程都死掉
执行过程每个独立的进程有一个程序运行的入口、顺序执行序列和程序入口,执行开销大线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,执行开销小
可并发性可并发执行可并发执行

2、进程间通信方式

管道:
速度慢,容量有限,只有父子进程能通讯
FIFO:
任何进程间都能通讯,但速度慢
消息队列:
容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题
信号量:
不能传递复杂消息,只能用来同步
共享内存区:
能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了同一进程内的一块内存
 

3、从操作系统的角度解释线程比进程切换的快的原因

        在操作系统中,由于CPU的时间片调度策略,从一个进程切换到另一个进程需要保存当前进程的状态并恢复另一个进程的状态:当前运行任务转为就绪(或者挂起、删除)状态,另一个被选定的就绪任务成为当前任务。上下文切换包括保存当前任务的运行环境,恢复将要运行任务的运行环境。
        在上下文切换过程中,CPU会停止处理当前运行的程序,并保存当前程序运行的具体位置以便之后继续运行。从这个角度来看,上下文切换有点像我们同时阅读几本书,在来回切换书本的同时我们需要记住每本书当前读到的页码。
在三种情况下可能会发生上下文切换:中断处理,多任务处理,内核/用户态切换
        在中断处理中,其他程序”打断”了当前正在运行的程序。当CPU接收到中断请求时,会在正在运行的程序和发起中断请求的程序之间进行一次上下文切换。

        在多任务处理中,CPU会在不同程序之间来回切换,每个程序都有相应的处理时间片,CPU在两个时间片的间隔中进行上下文切换。

        在Linux中进行内核/用户态切换也会进行上下文切换,进行系统调用时,CPU寄存器里原来用户态的指令位置需要先保存起来。接着,为了执行内核态代码,CPU寄存器需要更新为内核态指令的新位置。最后才是跳转到内核态运行内核任务。而系统调用结束后,CPU寄存器需要恢复原来保存的用户态,然后再切换到用户空间,继续运行进程,所以一次系统调用的过程,其实是发生了两次CPU上下文切换。
        每个进程都有属于自己的虚拟内存空间,进程中的所有线程共享进程的虚拟内存空间,所以进程之间互不影响,线程之间可能会相互影响。
        进程的切换实际上就是上下文切换,内核为每一个进程维持一个上下文,上下文就是重新启动一个进程所需的状态,包含以下内容:通用目的寄存器,浮点寄存器,程序计数器,用户栈
,状态寄存器,内核栈,各种内核数据结构:比如描绘地址空间的页表,包含有关当前进程信息的进程表,包含进程已打开文件信息的文件表。
        虚拟内存是操作系统为每个进程提供的一种抽象的,私有的,连续地址的虚拟内存空间,但是我们都知道实际上进程的数据以及代码必然要放到物理内存上,那么我们怎么知道虚拟空间中的数组实际上存放的具体位置呢?答案就是页表
        线程切换比进程块的主要原因就是进程切换涉及虚拟内存地址空间的切换而线程不会。因为每个进程都有自己的虚拟内存地址空间,而线程之间的虚拟地址空间是共享的,因此同一个进程之中的线程切换不涉及虚拟地址空间的转换,然而将虚拟地址转化为物理地址需要查找页表,查找页表是一个很慢的过程,所以线程切换自然就比进程快了

  • 24
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值