浏览器原理面试题 前端「前端面试进阶之浏览器原理」( 六 )


共享内存最大的问题就是多进程竞争内存的问题,就像类似于线程安全问题 。我们可以使用信号量来解决这个问题 。信号量的本质就是一个计数器,用来实现进程之间的互斥与同步 。例如信号量的初始值是 1,然后 a 进程来访问内存1的时候,我们就把信号量的值设为 0 , 然后进程b 也要来访问内存1的时候 , 看到信号量的值为 0 就知道已经有进程在访问内存1了 , 这个时候进程 b 就会访问不了内存1 。所以说,信号量也是进程之间的一种通信方式 。
(4)信号通信
信号(Signals )是Unix系统中使用的最古老的进程间通信的方法之一 。操作系统通过信号来通知进程系统中发生了某种预先规定好的事件(一组事件中的一个),它也是用户进程之间通信和同步的一种原始机制 。
(5)共享内存通信
共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问(使多个进程可以访问同一块内存空间) 。共享内存是最快的 IPC 方式 , 它是针对其他进程间通信方式运行效率低而专门设计的 。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信 。
(6)套接字通信
上面我们说的共享内存、管道、信号量、消息队列,他们都是多个进程在一台主机之间的通信,那两个相隔几千里的进程能够进行通信吗?答是必须的 , 这个时候 Socket 这家伙就派上用场了 , 例如我们平时通过浏览器发起一个 http 请求 , 然后服务器给你返回对应的数据,这种就是采用 Socket 的通信方式了 。
5. 僵尸进程和孤儿进程是什么?---了解即可(或者不需要看)
孤儿进程:父进程退出了 , 而它的一个或多个进程还在运行,那这些子进程都会成为孤儿进程 。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作 。
僵尸进程:子进程比父进程先结束,而父进程又没有释放子进程占用的资源 , 那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵死进程 。
6. 死锁产生的原因? 如果解决死锁的问题?---了解即可(或者不需要看)
所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用 , 它们都将无法再向前推进 。
系统中的资源可以分为两类:
可剥夺资源,是指某进程在获得这类资源后,该资源可以再被其他进程或系统剥夺 , CPU和主存均属于可剥夺性资源;
不可剥夺资源,当系统把这类资源分配给某进程后,再不能强行收回 , 只能在进程用完后自行释放,如磁带机、打印机等 。
产生死锁的原因:
(1)竞争资源
产生死锁中的竞争资源之一指的是竞争不可剥夺资源(例如:系统中只有一台打印机,可供进程P1使用 , 假定P1已占用了打印机 , 若P2继续要求打印机打印将阻塞)
产生死锁中的竞争资源另外一种资源指的是竞争临时资源(临时资源包括硬件中断、信号、消息、缓冲区内的消息等),通常消息通信顺序进行不当,则会产生死锁
(2)进程间推进顺序非法
若P1保持了资源R1,P2保持了资源R2 , 系统处于不安全状态,因为这两个进程再向前推进,便可能发生死锁 。例如 , 当P1运行到P1:Request(R2)时,将因R2已被P2占用而阻塞;当P2运行到P2:Request(R1)时 , 也将因R1已被P1占用而阻塞,于是发生进程死锁