操作系统-基础

进程、线程、协程

进程是程序中资源分配的最小单位,线程是运行调度的最小单位,一个进程可以包含多个线程,并且这些线程可以共享所在进程中的资源。协程是用户态的轻量级线程,它不受操作系统的调度,是由程序员或者库来控制,协程可以在一个线程中切换执行多个任务,从而实现异步编程的效果。另外,协程的创建和销毁都是在用户态中操作的,并且协程的调度是不需要进行上下文之间的切换,所以协程的开销非常小。

三者之间的区别

开销大小:进程开销最大,线程次之,协程最小

资源分配上:进程是资源分配的单位,线程和协程是资源调度的单位,线程共享所在进程中的资源,协程共享所在线程中的资源

地址空间:进程有独立的地址空间,线程共享进程的地址空间,协程也共享线程所在的地址空间

调度方式:进程和线程由操作系统调度,协程是由用户或库调度

内核态与用户态

内核态与用户态是操作系统中两种不同的运行模式。内核态是一种特权模式,在该状态下,操作系统具有访问硬件资源、修改关键数据等权利;用户态是普通应用程序的模式,该状态下,应用程序只能访问部分资源并且没有修改资源的权利。用户态相比于内核态它的访问、运行时间以及占用资源要比内核态小得多。

并发与并行

并发:指的是多个任务在同一时间段交替进行,通过不断切换上下文来实现执行的效果

并行:指的是多个任务在同一时间段内同时执行,并利用多个处理器或多核CPU的并行计算机能力来加速任务的完成

进程间的通信方式有哪些

1.管道(Pipe):管道是一种单向通信方式,可以在进程间传输数据,管道只能用于父子进程之间或者兄弟进程之间的通信,而命名管道(Named Pipe)命名管道可以用于任意进程之间的通信

2.共享内存:共享内存是一种通过共享内存块的方式进行进程间通信,多个进程可以访问同一个共享内存区域,并可以在该区域中进行数据读写

3.信号:信号是一种异步通信方式,进程可以通过发送信号来通知其他进程或者处理特定事件

4.套接字(Socket):套接字是一种通过网络进行进程间通信的方式,进程可以通过套接字进行数据的发送和接受

5.消息队列:消息队列是一种通过消息传递的方式进行进程间通信的方式,多个进程可以通过消息队列来发送和接受消息

进程是如何调度的

进程的调度主要分为两种方式,非剥夺调度(非抢占调度)和剥夺调度(抢占调度)

非抢占式调度:只允许进程主动放弃处理机。在运行过程中即便有更紧迫的任务到达,当前进程依然会继续使用处理机,直到该进程终止或者主动要求进入阻塞状态

抢占式调度:当一个进程正在处理机上执行时,如果有一个更重要或更紧迫的进程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给更重要紧迫的那个进程

非抢占式调度主要有:

1.先来先服务调度:每次从就绪队列选择最先进入队列的进程,然后一直运行,直到进程退出或被阻塞,才会继续从队列中选择第一个进程接着运行。(实现简单,但不利于短作业以及I/O密集型进程)

2.短作业优先调度:按照执行时间最短的进程先执行。该算法可以减少平均等待时间,但是要预先知道进程的执行时间。(容易长作业饥饿,实现困难)

3.高度响应比优先调度:响应比为:等待时间/服务时间,响应比高的先执行,可以避免饥饿现象(平衡了前两种方式)

抢占式调度主要有:

1.最短剩余时间优先调度(SPTN):当一个新的作业到达时,其整个运行时间与当前进程的剩余时间作比较,如果新的进程需要的时间更少,则挂起当前进程,运行新的进程。否则新的进程等待

2.时间片轮转调度:给每一个进程都分配一个时间片,时间片实行完毕就会切换进程,执行下一个进程,依次循环。此算法容易频繁的切换进程,浪费系统资源

3.多级反馈队列调度:多级反馈队列调度算法是对其他算法的一个折中权衡,是【时间片轮转算法】和【最高优先级算法】的综合和发展

优先级调度既有抢占式也有非抢占式:他是按照设定优先级执行,抢占式是动态调整优先级,如按照运行时间调整优先级。非抢占式是创建进程就设定了(适用实时系统,对低级优先级进程不利)

进程饥饿状态、孤儿进程、僵尸进程、守护进程
  • 进程饥饿状态指进程长时间无法获取所需要的资源而无法执行的现象。这些进程可能被一只推迟或者无法完成,即使5它们本身可能是最高优先级的进程也是如此,在非抢占式调度中的短作业优先调度容易出现饥饿进程

  • 孤儿进程:指父进程已经终止或不再运行的子进程,父进程已经提前结束,但是子进程仍在运行,此时子进程会被操作系统接管,处理它们的终止状态,防止成为僵尸进程。

  • 僵尸进程:指已经终止执行的子进程,但其父进程没有回收掉该子进程所占的资源。僵尸进程不再执行任何代码,但会仍存在于系统进程表中,占用了一些系统资源。

  • 守护进程:守护进程是一种在操作系统后台运行的特殊类型的进程,通常用于执行系统任务或服务。它们不受用户登录或注销的影响独立于用户会话运行,并且通常不与用户直接交互。守护进程通常在系统启动时启动,并在系统关闭时终止。它们的特点包括脱离终端控制、在后台运行、重定向标准输入输出、执行系统任务或服务等

什么是死锁、如何解决死锁?

死锁是指多个进程(线程)之间,每个进程都占用某些资源,而它们又在等在其他进程释放它们所需要的资源,从而导致所有进程都不能执行下一步任务的状态

避免死锁的策略主要有以下几种;

  • 预防死锁:通过合理的资源分配,避免循环依赖等方式,尽可能地预防死锁发生

  • 避免死锁:通过安全序列等方式,避免死锁的产生

  • 检测死锁:可以通过资源分配图等方式检测死锁是否已经发生

  • 解除死锁:当发现死锁已经发生时,可以采取中断某个进程、回收某个进程占用的资源等方式解除死锁

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值