操作系统知识整理

死锁,死锁产生的条件,如何避免死锁:在许多应用中进程需要以独占的方式访问资源,当操作系统允许多个进程并发执行时可能会出现进程永远被阻塞现象,如两个进程分别等待对方所占的资源,于是两者都不能执行而处于永远等待状态,此现象称为死锁

  • 互斥条件
    临界资源是独占资源,进程应互斥且排他的使用这些资源。
  • 占有和等待条件
    进程在请求资源得不到满足而等待时,不释放已占有资源。
  • 不剥夺条件
    又称不可抢占,已获资源只能由进程自愿释放,不允许被其他进程剥夺。
  • 循环等待条件
    又称环路条件,存在循环等待链,其中,每个进程都在等待链中等待下一个进程所持有的资源,造成这组进程处于永远等待状态。

分布式操作系统:系统的各组件分布于网络上多台计算机,各组件彼此直接仅仅通过消息传递来通信并协调行动。

分时操作系统:操作系统通过时间片轮转的方式同时为多个用户服务。

进程和线程的区别:一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据,共享进程的方法区资源,但每个线程有自己的程序计数器虚拟机栈本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位,内存分配:进程间独立,线程间共享。执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行。资源开销:切换进程的开销比切换线程的开销大。

进程间的通信方式:(通信是个啥:我们知道,为了保证安全,每个进程的用户地址空间都是独立的,一般而言一个进程不能直接访问另一个进程的地址空间,不过内核空间是每个进程都共享的,所以进程之间想要进行信息交换就必须通过内核。)进程间通信的目的是:数据传输,资源共享,通知事件。通信的方式有:管道通信(也叫匿名通信,只允许父子/兄弟进程使用,只能读或写,且是单方向;如果想实现相互通信(全双工通信),我们需要创建两个管道才行)命名管道(有名字的管道,有管道的路径,所以即使不是父子兄弟进程,也能使用)消息队列(消息队列允许一个或多个进程向它写入或读取消息,消息队列可以实现消息的随机查询,不一定非要以先进先出的次序读取消息,也可以按消息的类型读取。比有名管道的先进先出原则更有优势,消息队列的生命周期随内核,如果没有释放消息队列或者没有关闭操作系统,消息队列就会一直存在。而匿名管道随进程的创建而建立,随进程的结束而销毁,需要注意的是,消息队列对于交换较少数量的数据很有用,因为无需避免冲突。但是,由于用户进程写入数据到内存中的消息队列时,会发生从用户态拷贝数据到内核态的过程;同样的,另一个用户进程读取内存中的消息数据时,会发生从内核态拷贝数据到用户态的过程。因此,如果数据量较大,使用消息队列就会造成频繁的系统调用,也就是需要消耗更多的时间以便内核介入。) 共享内存(不同于消息队列频繁的系统调用,对于共享内存机制来说,仅在建立共享内存区域时需要系统调用,一旦建立共享内存,所有的访问都可作为常规内存访问,无需借助内核。这样,数据就不需要在进程之间来回拷贝,所以这是最快的一种进程通信方式。)信号量(pv操作,v是释放资源,资源量+1;p是消耗资源,资源量-1)

创建进程有哪些方式:fork(),vfork(),clone()有参数,父进程中返回子进程的进程号,子进程返回0.错误返回-1

资源竞争怎么办:资源竞争是指,一个全局变量资源在多个线程或者进程中被同时调用,造成该全局变量资源不断的被修改。解决方法:采用全局变量锁,每当线程调用全局变量时,就将该资源上锁,不允许被调用,只有当调用结束后才打开锁,这里引入互斥锁,能够保证全局变量资源的安全。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值