蒋豆芽的面试题专栏(14/操作系统之进程与线程)

  1. 进程通信中的管道实现原理是什么?⭐⭐⭐⭐⭐

  2. 说说什么是信号量,有什么作用?⭐⭐⭐⭐⭐

  3. 多进程内存共享可能存在什么问题?如何处理?⭐⭐⭐⭐⭐

  4. 一个线程占多大内存?⭐⭐⭐

  5. 32位系统能访问4GB以上的内存吗?⭐⭐⭐

  6. 说说进程、线程、协程是什么,区别是什么?⭐⭐⭐⭐⭐

  7. 互斥量能不能在进程中使用?⭐⭐⭐⭐⭐

=========================================================================================================

  • 本专栏适合于C/C++已经入门的学生或人士,有一定的编程基础。
  • 本专栏适合于互联网C++软件开发、嵌入式软件求职的学生或人士。
  • 本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅。这才是一份面试题总结的正确打开方式。这样才方便背诵
  • 针对于非科班同学,建议学习本人专刊文章《蒋豆芽的秋招打怪之旅》,该专刊文章对每一个知识点进行了详细解析。
  • 如专栏内容有错漏,欢迎在评论区指出或私聊我更改,一起学习,共同进步。
  • 相信大家都有着高尚的灵魂,请尊重我的知识产权,未经允许严禁各类机构和个人转载、传阅本专栏的内容。

=========================================================================================================

  1. 进程通信中的管道实现原理是什么?⭐⭐⭐⭐⭐

    操作系统在内核中开辟一块缓冲区(称为管道)用于通信。管道是一种两个进程间同一时刻进行单向通信的机制。因为这种特性,管道又称为半双工管道,所以其使用是有一定的局限性的。半双工是指同一时刻数据只能由一个进程流向另一个进程(一端负责读,一端负责写);如果是全双工通信,需要建立两个管道。

    管道分为无名管道和命名管道,无名管道只能用于具有亲缘关系的进程直接的通信(父子进程或者兄弟进程),可以看作一种特殊的文件,管道本质是一种文件;命名管道可以允许无亲缘关系进程间的通信。

    管道原型如下:

    #include <unistd.h>  
    int pipe(int fd[2]);  

    管道两端可分别用描述字fd[0]以及fd[1]来描述。注意管道的两端的任务是固定的,即一端只能用于读,由描述字fd[0]表示,称其为管道读端;另 一端则只能用于写,由描述字fd[1]来表示,称其为管道写端。如果试图从管道写端读取数据,或者向管道读端写入数据都将发生错误。一般文件的 I/O 函数都可以用于管道,如close()、read()、write()等。

    通信是指两个进程之间的信息交互,而pipe()函数创建的管道处于一个进程中间,单个进程中的管道几乎没有任何用处。因此一个进程在由 pipe()创建管道后,一般再使用fork() 建立一个子进程,然后通过管道实现父子进程间的通信。父子进程都有读端和写端,子进程的是从父进程复制过来的。

    img

    具体步骤如下:

    1. 父进程调用pipe开辟管道,得到两个文件描述符指向管道的两端。
    2. 父进程调用fork创建子进程,那么子进程也有两个文

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

- 本专栏适合于C/C++已经入门的学生或人士,有一定的编程基础。 - 本专栏特点: 本专刊囊括了C语言、C++、操作系统、计算机网络、嵌入式、算法与数据结构、数据库等一系列知识点,总结出了高频面试考点(附有答案)共计309道,事半功倍,为大家春秋招助力。 - 本专栏内容分为七章:共计309道高频面试题(附有答案)

全部评论
这里一个每添加一个线程,进程的额外开销是线程的调用栈的大小,这个是可以修改的,我的ubuntu 20.04是8M,具体多大根据系统和设定来看的,线程调用栈大小查询命令 ulimit -s
1 回复 分享
发布于 2021-04-19 15:32
信号量如何说资源独享呢?不是互斥锁呀
点赞 回复 分享
发布于 2021-04-29 22:45
进程:资源分配的最小单元。引入目的:在并发系统中,程序的执行具有间断性、失去封闭性。线程就使得多个程序可以并发执行。 线程:微进程,CPU调度的最小单位。引入目的:减少程序在并发执行的时空开销,提高系统的吞吐量和利用率,因为引入线程后,进程可以并发,一个进程的多个线程也可以并发。 协程:微线程,一个线程中含有多个协程,引入原因:若进程中线程数量很大,那么这些线程的不仅会占用大量内存,大量的线程切换也会增加耗时,如一个线程有10000个线程,每个线程按8M的内存,这可不是个小数目。引入协程后,假如用100个线程,每个进程有100个协程,这样时空开销迅速降下来了。协程没有增加线程的数量,反而相对减少了,通过分时复用运行多个协程,协程是用户级别,内核都不知道它的存在,也就没什么切换代价,进一步降低了线程的切换开销
点赞 回复 分享
发布于 2021-04-26 11:17
大佬,能不能详细说说“进程适应于多核、多机分布;线程适用于多核”。 看网上众说纷纭,那进程、线程可不可以跨核、跨CPU操作呢? 还有就是同一进程下的线程是不是只能串行执行而不能微观上并发执行?
点赞 回复 分享
发布于 2021-04-18 16:13

相关推荐

02-25 11:29
产品经理
牛客444597598号:兄弟 我只能说如果想找产品经理这种简历 基本就是毕业失业了 你这连实习都找不到的 简历跟产品经理一点都没有关系,你可以去搜搜产品的模版吧
点赞 评论 收藏
分享
网安已死趁早转行:山东这地方有点说法
点赞 评论 收藏
分享
评论
6
2
分享

创作者周榜

更多
牛客网
牛客企业服务