剑指Offer——知识点储备-操作系统基础

操作系统

操作系统什么情况下会出现死锁?

产生死锁的必要条件
  • (1)互斥条件:即某个资源在一段时间内只能由一个进程占有,不能同时被两个或两个以上的进程占有,这种独占资源如CD-ROM驱动器,打印机等,必须在占有该资源的进程主动释放它以后,其他进程才能占有该资源,这是资源本身的属性决定的。
  • (2)不可抢占条件:进程所获得资源在未使用完毕之前,资源申请者不能强行将资源从占用者手中夺取,而只能由该资源的占有者进程自行释放。
  • (3)占有且申请条件:进程至少已经占有一个资源,但又申请新的资源。由于该资源已被另外进程占有,此时该进程阻塞;但是它在等待新资源之时,仍继续占用已有的资源。
  • (4)循环等待条件:存在一个进程等待序列{P1,P2,……,Pn},其中P1等待P2所占有的某一部分资源,P2等待P3所占有的某一资源,……,而Pn等待P1所占有的某一资源,形成一个进程循环等待环。
死锁预防:
  • (1)打破互斥条件:即允许进程同时访问某些资源。但是,有的资源是不允许被同时访问的,如打印机。(这是资源本身属性所决定的,所以这种办法并无实用价值。)
  • (2)打破不可抢占条件:即允许进程强行从占有者那里获取某些资源。就是说,当一个进程已占有了某些资源,它又申请新的资源,但不能立即被满足时,它必须释放所占有的全部资源,以后再重新申请。它所释放的资源可以分配给其它进程。这就相当于该进程占有的资源被隐藏的占有了。这种预防死锁的方法实现起来困难,会降低系统性能。
  • (3)打破占有且申请条件:可以实现资源预先分配策略。即进程在运行前一次性的向系统申请它所需要的全部资源。如果某个进程所需要的全部资源不能得到满足,则不分配任何资源,此进程暂不运行,只有当系统能够满足当前进程的全部资源需求时,才能一次性的将所申请的资源全部分配给该进程,由于运行的进程已占有了它所需要的全部资源,所以不会发生占有资源又申请资源的现象,因此不会发生死锁。

    但是,这种策略也有如下缺点:

    1)在许多情况下,一个进程在执行之前不可能知道它所需要的全部资源,这是由于进程的执行时是动态的,不可预测的。

    2)资源利用率低:无论所分资源何时用到,一个进程只能占用所需资源的全部资源后才能执行。即使有些资源最后才被该进程用到一次,但该进程在生存期间却一直占有它们,造成长期占着不用的状况。这显然是一种极大的资源浪费。

    3)降低了进程的并发性,因为资源有限,又加上存在浪费,能分配到所需全部资源的进程个数就必然少了。
  • (4)打破循环等待条件:实行资源有序分配策略。采用这种策略,即把资源事先分类编号,按号分配,使进程在申请占有资源时不会形成环路。所有进程对资源的请求必须严格按照资源序号递增的顺序提出。进程占用(应该改成用完)了小号资源,才能申请大号资源,就不会产生环路,从而预防死锁。这种策略与前面相比,资源利用率和系统吞吐量都有很大提高。

    但是也存在以下缺点:

    1)限制了进程对资源的请求,同时给系统中所有资源合理编号也是件难事,并增加了系统的开销。

    2)为了遵循按编号申请的次序,暂不使用的资源也需要提前申请,从而增加了进程对资源占用时间。
死锁避免:
  • 1)避免一个线程同时获取多个锁;
  • 2)避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源;
  • 3)尝试使用定时锁,使用lock.tryLock(timeout)来代替使用内部锁机制;
  • 4)对于数据库锁,加锁解锁必须在一个数据库连接里,否则会出现解锁失败的情况;
实际的应用方法
  • (1)安全序列
  • (2)银行家算法

如何理解分布式锁?

分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,需要使用到分布式锁。

进程间通信有哪几种方式?

注意:进程间通信是通过操作系统,而线程间通信是基于进程的,不需要经过操作系统。

- (1)管道:管道可用于具有亲缘关系进程间的通信,允许一个进程和另外一个与它有共同祖先的进程之间进行通信。

- (2)命令管道:命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间通信,命名管道在文件系统中有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建。

- (3)信号:信号是比较复杂的通信方式,用于通知接收进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身。

- (4)消息队列:消息队列是消息的连接表,包括Posix消息队列、systern V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读队列中的消息、消息队列克服了信号承载信息量少管道只能承载无格式字节流以及缓存区大小受限等缺陷

- (5)共享内存:使得多个进程可以访问同一块内存空间,是最快可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其他通信机制,如与信号量结合使用,来达到进程间的同步及互斥。

- (6)内存映射;内存映射允许多个进程间通信,每一个使用该机制的进程通过把一个共享的文件映射到自己的进程地址空间来实现它。

- (7)信号量:主要作为进程间以及同一进程不同线程之间的同步手段。

- (8)套接字(socket)更为一般的进程间通信机制,可用于不同机器之间的进程通信。

线程同步与阻塞的关系?同步一定阻塞吗?阻塞一定同步吗?

线程同步与阻塞的关系

- (1)线程同步与阻塞没有一点关系。

- (2)同步和异步关注的是消息通信机制。所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值。而异步则是相反,在调用发出之后,这个调用直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果,而是在调用发出后,被调用者通过状态,通知调用者,或者回调函数处理这个调用。

- (3)阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)的状态。阻塞调用是指调用结果返回之间,当前线程会被挂起,调用线程只能在得到结果之后才会返回。非阻塞调用指在不能立即得到结果之前,调用不会阻塞当前线程。

进程和线程之间的区别

进程是执行着的应用程序,而线程是进程内部的一个执行序列。

- (1)地址空间和其他资源:进程间相互独立,同一进程的各线程间资源共享,某进程内的线程在其他进程不可见。

- (2)通信:进程间通信IPC(一种标准的unix通信机制,可见上面进程间的通信),线程间可以直接读写进程数据段(如全局变量)来进行通信–需要进程同步和互斥的辅助,来保证数据的一致性。

- (3)切换:线程比进程切换快的多;

- (4)调度:进程是运行中的程序(例如某个应用:qq、微信、支付宝),而线程是进程内部的一个执行序列(比如:qq中的某一个操作,聊天写数据,查看聊天记录……)





剑指Offer——知识点储备-操作系统基础的更多相关文章

  1. 剑指Offer——知识点储备-Java基础

    剑指Offer--知识点储备-Java基础 网址来源: http://www.nowcoder.com/discuss/5949?type=0&order=0&pos=4&pa ...

  2. 剑指Offer——知识点储备-网络基础

    剑指Offer--知识点储备-网络基础 计算机网络 http和https的区别 (1)http是http协议运行在tcp之上,所传输的内容都是明文,客户端和服务器端都无法验证对方的身份. (2)htt ...

  3. 剑指Offer——知识点储备-数据库基础

    剑指Offer--知识点储备-数据库基础 数据库 事务 事务的四个特性(ACID):   原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Dura ...

  4. 剑指Offer——知识点储备-JVM基础

    剑指Offer--知识点储备-JVM基础 1.java内存与内存溢出 1.1 JVM分为哪些区,每一个区干嘛的?(见java虚拟机38页) (1)程序计数器(线程私有) 当前线程执行字节码的信号指示器 ...

  5. 剑指Offer——知识点储备-J2EE基础

    剑指Offer--知识点储备-J2EE基础 9.2 jdk 1.8的新特性(核心是Lambda 表达式) 参考链接:http://www.bubuko.com/infodetail-690646.ht ...

  6. 剑指Offer——知识点储备--Linux基本命令+Makefile

    剑指Offer--知识点储备–Linux基本命令 1.linux下查看进程占用cpu的情况(top): 格式 top [-] [d delay] [q] [c] [S] [s] [i] [n] 主要参 ...

  7. 剑指Offer——知识点储备-常用算法

    剑指Offer--知识点储备-常用算法 快速排序 注:若排序是有序的,采用快排,则退化为冒泡排序. 解决这个问题,采用两个选取基准的方法 (1)随机选取基数(在这个区间内随机取一个数) 出现的恶劣情况 ...

  8. 剑指Offer——知识点储备-设计模式

    剑指Offer--知识点储备-设计模式 设计模式 设计模式的六大原则 (1)单一职责原则(有且仅有一个原因引起类的变化): (2)里氏替换(任何父类出现的地方子类都可以替换): (3)依赖倒置(依赖抽 ...

  9. 剑指Offer——知识点储备-故障检测、性能调优与Java类加载机制

    剑指Offer--知识点储备-故障检测.性能调优与Java类加载机制 故障检测.性能调优 用什么工具可以查出内存泄露 (1)MerroyAnalyzer:一个功能丰富的java堆转储文件分析工具,可以 ...

随机推荐

  1. 前端之旅HTML与CSS篇之IE6常见BUG

    1.IE6怪异解析之padding与border算入宽高原因:未加文档声明造成非盒模型解析解决方法:加入文档声明<!doctype html> 2.IE6在块元素.左右浮动.设定marin ...

  2. vue插件移动框

    npm i dragablemodel -S(安装插件) import dragablemodel from 'dragablemodel' Vue.use(loading) 模板(组件) <d ...

  3. php文件包含漏洞(input与filter)

    php://input php://input可以读取没有处理过的POST数据.相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小,并且不需要特殊的php.ini设置.php:/ ...

  4. Docker And Swarm Mode(一)

    (一)节点的创建和配置 前言  虽然工作中一直在用Docker和Docker Swarm,但是总感觉有点陌生,总想自己亲手来写写和配置Docker 容器相关的事情,这篇文章主要是参考了Los Tech ...

  5. codeforces 815C Karen and Supermarket

    On the way home, Karen decided to stop by the supermarket to buy some groceries. She needs to buy a ...

  6. [AHOI2012]铁盘整理

    题目描述 输入输出格式 输入格式: 共两行.第一行为铁盘个数N(1<=N<=50),第二行为N个不同的正整数,分别为从上到下的铁盘的半径R.(1<=R<=100) 输出格式: ...

  7. ●HDU 4787 GRE Words Revenge

    题链: http://acm.hdu.edu.cn/showproblem.php?pid=4787 题解: AC自动机(强制在线构造) 题目大意: 有两种操作, 一种为:+S,表示增加模式串S, 另 ...

  8. 洛谷mNOIP模拟赛Day1-数颜色

    传送门 题目大意: 给定一个序列,维护每个数字在[L,R]出现的次数以及交换a[x]和a[x+1]的操作 一开始想的分桶法,感觉复杂度还可以吧,常数有点大,于是死得很惨(65分) #include&l ...

  9. C++Primer学习——函数

    编译器能以任意顺序对形参进行求值 函数的返回类型不能是数组类型和函数类型. 函数开始时为形参分配内存,一旦函数结束,形参也就被销毁了. 如果弄成静态局部变量,那么回到程序终止结束时才被销毁. void ...

  10. [3.24校内训练赛by hzwer]

    来自FallDream的博客,未经允许,请勿转载,谢谢. ----------------------------------------------------------------------- ...