0
点赞
收藏
分享

微信扫一扫

操作系统面经

南柯Taylor 2022-03-20 阅读 56
linuxwindows

1、进程间通信的几种方式: *****

1、管道:管道分为无名管道和有名管道,无名管道只能用于具有亲缘关系的进程间通信(类似于半双工通信)
有名管道它提供了一个路径名与之关联,可适用于非亲缘关系的进程间通信(只要可以访问该路径,都可以与之通信)
2、共享内存:允许两个不相关的进程访问同一个逻辑内存,是进程间通信非常有效的一种方式,但未提供同步机制
3、消息队列:消息队列用于同一台机器上的进程间通信,和管道很类似,都是在系统内核中保存消息
4、信号量:主要作为进程之间及同一种进程的不同线程之间得同步和互斥手段,可以用来控制多个进程对共享资源的访问(类似于一个计数器,信号量会有一个初值,当有进程申请使用信号量,然后信号量-1,当信号量值=0说明没有资源了,其他进程访问必须等待,当进程执行完之后,信号量会+1)
5、信号:是Linux系统中用于进程之间通信或操作的一种机制,信号可以在任何时候发送给某一进程,而无须知道该进程的状态。如果该进程并未处于执行状态,则该信号就由内核保存起来,知道该进程恢复执行并传递给他为止
6、套接字:可用于不同设备之间的进程间通信

2、进程和线程的区别和联系(谈谈进程和线程)?

联系:
进程类似于线程的容器,一个进程可以有多个线程,一个线程只能存在于一个进程里
区别:
1、进程是资源分配和调度的基本单元,线程不分配资源,但可以使用进程的资源
2、进程的开销要大于线程
3、进程之间不会相互影响,但线程奔溃会影响同一进程中的其他线程

3、虚拟地址空间

在这里插入图片描述

一般32位操作系统分配的虚拟地址空间为0~4 GB, 其中内核区为1 GB, 用户区为4GB,每一个进程的进程控制块(PCB)都位于内核区(主要包括:进程管理、内存管理、设备管理、虚拟文件系统)
用户区(从下网上看):
保留区:大小为0~4k,位于虚拟空间的最低部分,未赋予物理地址,用于捕捉使用空指针等造成的异常情况
代码段(.text:主要存放代码(机器指令)
数据段(.data):用于存放已初始化的全局变量和静态局部变量
.bss段:用于存放未初始化的全局变量和静态局部变量
堆空间:new和malloc分配空间的地方,用于内存的分配,从下往上分配,通过指针间接访问(后进先出)
共享区:主要用于将硬盘文件内容映射到内存
栈空间:用于存放局部变量,分配空间从上往下(后进先出)
命令行参数:存放命令行参数的内容
环境变量:存放当前的环境变量
虚拟地址空间的好处:
1、有利于编译器和系统安排程序地址
2、方便进程间隔离,互补干扰
3、虚拟内存,从逻辑上扩大了内存

举报

相关推荐

0 条评论