当前位置: 首页 > news >正文

操作系统面经

进程与线程区别

1.进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)

2.进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程小很多,创建也是。

3.线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式进行。

4.但是多进程程序健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另一个进程造成影响,因为进程有自己独立的地址空间。

死锁产生条件和解决办法

产生条件

1.互斥条件:一个资源每次只能被一个进程使用

2.请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放

3.不剥夺:进程已获得的资源,在未使用完之前,不能强行剥夺

4.循环等待条件

解决办法

1.如果不同程序会并发存取多个表,尽量约定以相同顺序访问表

2.在同一个事务中,尽可能左到一次锁定所需要的所有资源,减少死锁产生概率

3.如果业务处理不好,可以用分布式事务锁或乐观锁

物理地址和逻辑地址

逻辑地址

逻辑地址是CPU分配给每个进程的地址,逻辑(虚拟)地址和它的实际所处位置是不一样的,这是共享内存时所必需的。逻辑地址通过MMU(内存管理单元)转换为物理地址。

物理地址

内存空间所在的实际内存地址,由CPU生成。

多进程、多线程区别

数据共享、同步

多进程共享复杂,同步简单;多线程共享简单,同步复杂

内存、CPU

多进程占用内存多,切换复杂,CPU利用率低;多线程相反

创建销毁、切换

多进程创建销毁、切换复杂,速度慢;多线程相反

编程调试

多进程编程简单,调试简单;多线程相反

可靠性

进程间相互不影响;一个线程挂掉,整个线程挂掉

分布式

多进程适应于多核、多机分布;多线程适应于多核分布

进程间通信方式

管道

数据单向传输。

1.匿名管道。用完销毁。通信范围是存在父子关系的进程

2.命名管道。FIFO。不相关的进程间也能通信

缺点:效率低,不适合频繁交换数据

消息队列

像发邮件一样,你发一封,我回一封,可以频繁沟通

缺点:

1.通信不及时

2.附件有大小限制

3.存在用户态和内核态之间的数据拷贝开销

共享内存

一块虚拟地址空间映射到相同的物理内存中。这个进程写入的东西,另一个进程马上就能看到,不需要拷贝传输,提高了通信速度

信号量

实现进程间的互斥与同步。

两种操作:

1.P,信号量-1,信号量<0,表示资源被占用,需等待;>0,可以执行

2.V,信号量+1,信号量<=0,表示有阻塞中的进程,唤醒运行;>0,没有阻塞中的进程。

两个操作必须成对出现。

信号量初始为1,代表互斥;初始为0,代表同步,比如说保证进程A在进程B之前执行

信号

适用于异常情况下的工作模式。

Linux提供了几十种信号,通过kill -l可以查看所有信号

信号是进程间通信机制中唯一的异步通信机制,发送信号后有如下操作:

1.执行默认操作。

2.捕捉信号。为信号定义一个信号处理函数

3.忽略信号。不希望处理某些信号,就忽略

Socket

跨网络与不同主机上的进程通信。

三种常见通信方式:

1.基于TCP协议的通信方式

2.基于UDP协议的通信方式

3.本地进程间通信

线程之间共享哪些内容

堆,全局变量,静态变量,文件等公用资源。

独享:栈,寄存器

http://www.lryc.cn/news/26847.html

相关文章:

  • 一天约了4个面试,复盘一下面试题和薪资福利
  • 详解单链表(内有精美图示哦)
  • csdn文章导航
  • 【Spring】掌握 Spring Validation 数据校验
  • 定语 从句
  • 【数据可视化工具】浅谈 DataEase 和 FineBI 支持的数据源
  • 100种思维模型之上帝视角思维模型-025
  • 从这5个方面,总结我当PM的第一年
  • ChatGPT可以作为一个翻译器吗?
  • 详述java的设计模式(三)
  • Linux命令·pwd
  • 以图搜图服务快速搭建
  • 【TensorFlow安装踩坑记录】
  • 03.03回溯法
  • I.MX6ULL内核开发0:linux内核模块
  • qsort快速排序的实现以及模拟实现qsort的功能(狠狠的拿捏)
  • [Java·算法·中等]LeetCode215. 数组中的第K个最大元素
  • xgboost:算法数学原理
  • map、multimap、unordered_map
  • 2023年全国最新会计专业技术资格精选真题及答案11
  • Centos7搭建NFS
  • ThreadLoca基本使用以及与synchronized的区别
  • 【C++】纯虚函数、纯虚析构
  • Python 进阶小技巧:7招展开嵌套列表
  • 【Spring6】| Bean的作用域
  • Qt界面美化之自定义qss样式表
  • 春招进行时:“211文科硕士吐槽工资5500” HR:行情和能力决定价值
  • 【DaVinci Developer专题】-45-自动生成SWC中所有Runnable对应的C文件
  • redis启动和关闭服务脚本
  • windows CMD快捷键: