1、线程与进程的区别联系

2、进程通信方式有哪些?

3、同步的方式有哪些?

4、ThreadLocal与其它同步机制的比较

5、进程死锁的条件

第一题:

(1)线程是进程的一个实体,一个进程可以拥有多个线程,多个线程也可以并发执行。一个没有线程的进程也可以看做是单线程的,同样线程也经常被看做是一种轻量级的进程。并且进程可以不依赖于线程而单独存在,而线程则不然。

(2)进程是并发程序在一个数据集合上的一次执行过程,进程是系统进行资源分配和调度的独立单位,线程是进程的实体,它是比进程更小的能够独立执行的基本单元,线程自己不拥有任何系统资源,但是它可以访问其隶属进程的全部资源。

(3) 与进程的控制表PCB相似,线程也有自己的控制表TCB,但是TCB中所保存的线程状态比PCB表少得多。

进程的作用与定义:是为了提高CPU的执行效率,为了避免因等待而造成CPU空转以及其他计算机硬件资源的浪费而提出来的。

线程的引入:例如,有一个Web服务器要进程的方式并发地处理来自不同用户的网页访问请求的话,可以创建父进程和多个子进程的方式来进行处理,但是创建一个进程要花费较大的系统开销和占用较多的资源。除外,这些不同的用户子进程在执行的时候涉及到进程上下文切换,上下文切换是一个复杂的过程。所以,为了减少进程切换和创建的开销,提高执行效率和节省资源,人们在操作系统中引入了"线程(thread)"的概念。

第二题:

进程间通讯的方式:

  • 管道中还有命名管道和非命名管道之分,非命名管道只能用于父子进程通讯,命名管道可用于非父子进程,命名管道就是FIFO,管道是先进先出的通讯方式。FIFO是一种先进先出的队列。它类似于一个管道,只允许数据的单向流动。每个FIFO都有一个名字,允许不相关的进程访问同一个FIFO,因此也成为命名管。
  • 消息队列:是用于两个进程之间的通讯,首先在一个进程中创建一个消息队列,然后再往消息队列中写数据,而另一个进程则从那个消息队列中取数据。需要注意的是,消息队列是用创建文件的方式建立的,如果一个进程向某个消息队列中写入了数据之后,另一个进程并没有取出数据,即使向消息队列中写数据的进程已经结束,保存在消息队列中的数据并没有消失,也就是说下次再从这个消息队列读数据的时候,就是上次的数据!!!
  • 信号量, 不能传递复杂消息,只能用来同步
  • 共享内存,只要首先创建一个共享内存区,其它进程按照一定的步骤就能访问到这个共享内存区中的数据,当然可读可写;

几种方式的比较:

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

第三题:

线程同步指多个线程同时访问某资源时,采用一系列的机制以保证同时最多只能一个线程访问该资源。线程同步是多线程中必须考虑和解决的问题,因为很可能发生多个线程同时访问(主要是写操作)同一资源,如果不进行线程同步,很可能会引起数据混乱,造成线程死锁等问题;

线程同步的方式:

  • 临界区:通过对多线程的串行化来访问公共资源或者一段代码,速度快,适合控制数据访问
  • 互斥量:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以可以保证公共资源不会同时被多个线程访问
  • 信号量:它允许多个线程同一时刻访问同一资源,但是需要限制同一时刻访问此资源的最大线程数目。信号量对象对线程的同步方式与前面几种方法不同,信号允许多个线程同时使用共享资源,这与操作系统中PV操作相似。
  • 事件(信号):通过通知操作的方式来保持多线程的同步,还可以方便的实现多线程的优先级比较的操作

总结比较: 

  • 互斥量与临界区的作用非常相似,但互斥量是可以命名的,也就是说它可以跨越进程使用。所以创建互斥量需要的资源更多,所以如果只为了在进程内部是用的话使用临界区会带来速度上的优势并能够减少资源占用量。因为互斥量是跨进程的互斥量一旦被创建,就可以通过名字打开它。
  • 互斥量(Mutex),信号灯(Semaphore),事件(Event)都可以被跨越进程使用来进行同步数据操作,而其他的对象与数据同步操作无关,但对于进程和线程来讲,如果进程和线程在运行状态则为无信号状态,在退出后为有信号状态。所以可以使用WaitForSingleObject来等待进程和线程退出。
  • 通过互斥量可以指定资源被独占的方式使用,但如果有下面一种情况通过互斥量就无法处理,比如现在一位用户购买了一份三个并发访问许可的数据库系统,可以根据用户购买的访问许可数量来决定有多少个线程/进程能同时进行数据库操作,这时候如果利用互斥量就没有办法完成这个要求,信号灯对象可以说是一种资源计数器。

第四题:

Threadlocal和其他所有的同步机制都是为了解决多线程中的对同一变量的访问冲突,在普通的同步机制中,是通过对对象加锁来实现多个线程对同一变量的安全访问的。这时该变量是多个线程共享的,使用这种同步机制需要很细致的分析在什么时候对变量进行读写,什么时候需要锁定某个对象,什么时候释放该对象的索等等。所有这些都是因为多个线程共享了该资源造成的。Threadlocal就从另一个角度来解决多线程的并发访问,Threadlocal会为每一个线程维护一个和该线程绑定的变量副本,从而隔离了多个线程的数据共享,每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。ThreadLocal提供了线程安全的共享对象,在编写多线程代码时,可以把不安全的变量封装进ThreadLocal。

总结:当然ThreadLocal并不能替代同步机制,两者面向的问题领域不同。同步机制是为了同步多个线程对相同资源的并发访问,是为了多个线程之间进行通信的有效方式;而ThreadLocal是隔离多个线程的数据共享,从根本上就不在多个线程之间共享资源(变量),这样当然不需要对多个线程进行同步了。所以,如果你需要进行多个线程之间进行通信,则使用同步机制;如果需要隔离多个线程之间的共享冲突,可以使用ThreadLocal,这将极大地简化你的程序,使程序更加易读、简洁。

第五题:

首先回答死锁的定义,所谓死锁就是一个进程集合中的多个进程因为竞争资源,而造成的互相等待现象。

死锁的原因:系统资源不足;多个进程的推进顺序不合理

死锁的必要条件:

  • 互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。
  • 请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。
  • 非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。
  • 循环等待条件(Circular wait):系统中若干进程组成环路,改环路中每个进程都在等待相邻进程正占用的资源。

处理死锁的策略:

  • 忽略该问题。例如鸵鸟算法,该算法可以应用在极少发生死锁的情况下。传说中,鸵鸟看到危险就把头深埋地下,这是显然是一种很消极的策略。
  • 检测死锁并且恢复。
  • 通过对资源有序分配,以避免循环等待的“环路”发生。
  • 通过破坏死锁的必要条件,来防止死锁的产生。

转载于:https://www.cnblogs.com/newstart/archive/2012/12/29/2839015.html

收集的一些操作系统面试题相关推荐

  1. 操作系统面试题(史上最全、持续更新)

    尼恩面试宝典专题40:操作系统面试题(史上最全.持续更新) 本文版本说明:V28 <尼恩面试宝典>升级规划为: 后续基本上,每一个月,都会发布一次,最新版本,可以联系构师尼恩获取, 发送 ...

  2. 几率大的杂乱+操作系统面试题(含答案)

    其他面试题类型汇总: Java校招极大几率出的面试题(含答案)----汇总 几率大的网络安全面试题(含答案) 几率大的多线程面试题(含答案) 几率大的源码底层原理,杂食面试题(含答案) 几率大的Red ...

  3. 这可能最全的操作系统面试题

    文章目录 操作系统简介篇 解释一下什么是操作系统 操作系统的主要功能 软件访问硬件的几种方式 解释一下操作系统的主要目的是什么 操作系统的种类有哪些 为什么 Linux 系统下的应用程序不能直接在 W ...

  4. 山东大学软件学院2021操作系统期末试题b卷

    山东大学软件学院2020-2021操作系统期末试题 B卷 回忆版 数据是考完抄下来的,吼吼吼. 一.结合操作系统.对资源和程序的管理和分配,描述中断机制所起的作用在哪方面(10分) 二.结合实现进程机 ...

  5. 计算机四级考试操作系统单元题,2016年计算机四级考试操作系统单选试题及答案1...

    操作系统单选题 1在组成计算机系统的各类资源中,主要包含有硬件部件以及() A.代码和数据B.键盘.鼠标和显示器C.操作系统D.各类应用软件 参考答案:A 2共享性是操作系统的特征之一,计算机中的各类 ...

  6. 《计算机操作系统》试题库——修订版

    <计算机操作系统>试题库 1. 单项选择题(共200个题目) 100236. 一般用户更喜欢使用的系统是(C ). A.手工操作 B.单道批处理 C.多道批处理 D.多用户分时系统 100 ...

  7. 计算机基础应用统考试题及答案,2020年9月统考《计算机应用基础》操作系统应用试题及答案4...

    统考<计算机应用基础>操作系统应用试题及答案4 1.在Windows 文件夹窗口中共有35个文件,用鼠标左键依次单击前5个文件,被选定的文件个数是______. A.0 B.1 C.5 D ...

  8. 计算机操作系统面试题

    操作系统面试题 1.进程和线程的区别? 2.死锁?死锁产生的原因?死锁的必要条件?怎么处理死锁? 3.Windows内存管理方式:段存储.页存储.段页存储 4.进程的几种状态? 5.IPC通信方式? ...

  9. Day28-《Linux操作系统》试题

    <Linux操作系统>试题 学号: 姓名: 成绩: 共20题,每题5分,每道题只能使用一条命令语句,多条命令语句不得分,共100分. 1.在用户主目录下创建子目录exam01. mkdir ...

最新文章

  1. 用男女朋友关系解释计算机常用概念
  2. C# Winform应用程序占用内存较大解决方法整理(转)
  3. c++ 暂停功能_app下载功能背后的逻辑
  4. QT+VTK 对接使用
  5. Taro+react开发(15)--对应文件编译
  6. 字符串16进制数字转换到Ascll字符串
  7. 17商品推荐系统项目框架
  8. Cpp module
  9. python 读取wifi数据_通过Python实现WiFi测试数据分析
  10. nginx location的命中过程
  11. linux 进程学习
  12. App、小程序、H5的区别
  13. dreamweavercc 数据库_Dreamweaver CC
  14. HTML+CSS奥运五环
  15. SQL建表语句中 COLLATE Chinese_PRC_CI_AS是何意思?
  16. Linux下载并安装rabbitmq-server-3.6.5-1.noarch.rpm
  17. HTTP详解(请求方式)
  18. linux -- 嵌入式linux下wifi无线网卡驱动
  19. 计算机综合布线考试试题A,答案_网络综合布线期末考试A卷.doc
  20. 【C语言优秀综合课程设计】学生点名系统的设计与实现(2021-07-09)

热门文章

  1. 遍历页面上的所有控件
  2. 内存 : DDR2与DDR
  3. Leetcode 6
  4. 【Mac visual studio community使用技巧】打开vs如何查看解决方案等
  5. 2059-authentication plugin 'caching_sha2_passwordcnnot bt loaded :mysql8.0数据库链接不上:
  6. 浏览器默认标签样式总结及css初始化程序(转)
  7. C语言函数指针的使用
  8. Hadoop源代码分析(包mapreduce.lib.input)
  9. 重拾-Spring Transaction
  10. VS出现异常?!和十进制转二进制比是小事