linux面试

1.用户进程间通信主要哪几种方式

(1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。

(2)命名管道(named pipe):命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。命名管道在文件系统中有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建。

(3)信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数)。

(4)消息(Message)队列:消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺

(5)共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。

(6)信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。

(7)套接字(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。

2.Linux中主要有哪几种内核锁?

Linux的内核锁主要是自旋锁和信号量。

自旋锁最多只能被一个可执行线程持有,如果一个执行线程试图请求一个已被争用(已经被持有)的自旋锁,那么这个线程就会一直进行忙循环——旋转——等待锁重新可用。要是锁未被争用,请求它的执行线程便能立刻得到它并且继续进行。自旋锁可以在任何时刻防止多于一个的执行线程同时进入临界区。

说明:自旋锁一般用于保护禁止内核抢占的临界区。

Linux中的信号量是一种睡眠锁。如果有一个任务试图获得一个已被持有的信号量时,信号量会将该任务推入等待队列,然后让其睡眠(也就是挂起)。这时处理器获得自由去执行其它代码。当持有信号量的进程将信号量释放后,在等待队列中的一个任务将被唤醒,从而便可以获得这个信号量。
信号量的睡眠特性,使得信号量适用于锁会被长时间持有的情况;只能在进程上下文中使用,因为中断上下文中是不能被调度的;另外当代码持有信号量时,不可以再持有自旋锁。

3.Linux 内核中的同步机制
原子操作

原理:是借助于汇编语言指令中对“读--修改--写”具有原子性的汇编指令来实现。

信号量

原理: 当内核控制路径试图获取内核信号量所保护的忙资源时,相应的进程被挂起;只有在 资源被释放时,进程才再次变为可运行。

使用限制:只有可以睡眠的函数才能获取内核信号量 ;

中断处理程序和可延迟函数都不能使用内核信号量。

自旋锁

主要用于多处理器环境中。

 原理:如果一个内核控制路径发现所请求的自旋锁已经由运行在另一个CPU上的内核控制路径“锁着”,就反复执行一条循环指令,直到锁被释放。

说明:自旋锁一般用于保护禁止内核抢占的临界区。

    在单处理器上,自旋锁的作用仅是禁止或启用内核抢占功能。

顺序锁

   顺序锁与自旋锁非常相似,仅有一点不同,即顺序锁中的写者比读者有较高的优先级,也就意味着即使读者正在读的时候也允许写者继续运行。

RCU (Read-Copy Update,顾名思义就是读-拷贝修改)

主要用于保护被多个CPU读的数据结构。

  允许多个读者和写者同时运行,且RCU是不用锁的。

  使用限制:

     1)RCU只保护被动态分配并通过指针引用的数据结构

     2)在被RCU保护的临界区中,任何内核控制路径都不能睡眠。

  原理:

    当写者要更新数据时,它通过引用指针来复制整个数据结构的副本,然后对这个副本进行修改。修改完毕后,写者改变指向原数据结构的指针,使它指向被修改后的副本,(指针的修改是原子的)。

另外一些同步机制,包括大内核锁、读写锁、大读者锁。

时间: 2024-12-27 20:17:37

linux面试的相关文章

Linux面试试题宝典,你能打多少分?大神勿进

linux面试宝典(1)一.选择题1. Linux系统中DNS服务进程名为 (  )A.named  B.httpd  C.ftpd  D.SysLog 2.在UINX/Linux中,系统Root用户口令信息一半保存的文件夹是( )A.autobat  B.service.conf  C.inetd.conf  D.shadow 3. 在下列选项中,属于Linux系统日志服务的是( )A.named  B.httpd  C.ftpd  D.SysLog 4.Linux操作系统支持的文件系统类型是

Linux面试中所谓的专业不专业你怎么看?

先抛出几个问题: 1.MySQL5.6.x包多大? 2.你谈一下linux内核结构? 3.谈谈reboot和shutdown和halt区别 4.200G的数据库你怎么保障其高效稳定运行? 5.给你1000台服务器你怎么规划? 6.你谈谈nginx的相关模块? 7.lvs.haproxy,nginx,apache区别是什么?那个好用? 8.你谈谈redis和mc的区别? 9.谈一下你怎么保障服务器的安全性? 10.谈谈unix和linux的区别? ...... 遇到过一些面试,和朋友经历的面试.总

linux面试题目--1

Linux面试题目 填空题1. 在Linux系统中,以 (文件)方式访问设备 .2. Linux内核引导时,从文件/etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用i节点来标识.4. 全部磁盘块由四个部分组成,分别为引导块 .专用块 . i节点表块 和数据存储块.5. 链接分为:硬链接 和 符号链接.6. 超级块包含了i节点表 和 空闲块表等重要的文件系统信息.7. 某文件的权限为:drw-r--r--,用数值形式表示该权限,则该八进制数为: 644,该文件属性是

linux面试题目—2

linux面试题目—2 linux面试题目—2 二 选择题 1.关闭linux系统(不重新启动)可使用命令 B . A Ctrl+Alt+Del B halt C shutdown -r now D reboot 2.实现从IP地址到以太网MAC地址转换的命令为: C . A ping B ifconfig C arp D traceroute 3.在vi编辑器中的命令模式下,键入 B 可在光标当前所在行下添加一新行. A <a>; B <o>; C <I>; D A

手撕面试官系列(六):并发+Netty+JVM+Linux面试专题

并发面试专题 (面试题+答案领取方式见侧边栏) 现在有 T1.T2.T3 三个线程,你怎样保证 T2 在 T1 执行完后执行,T3 在 T2 执行完后执行? 在 Java 中 Lock 接口比 synchronized 块的优势是什么?你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它? 在 java 中 wait 和 sleep 方法的不同? 用 Java 实现阻塞队列. 用 Java 写代码来解决生产者——消费者问题. 用 Java 编程一

非常全的linux面试笔试题及答案

非常全的linux面试笔试题及答案 一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件/etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用 i节点来标识.4. 全部磁盘块由四个部分组成,分别为引导块 .专用块 . i节点表块 和数据存储块.5. 链接分为: 硬链接 和 符号链接 .6. 超级块包含了i节点表 和 空闲块表等重要的文件系统信息.7. 某文件的权限为:d-rw-_r--_r--,用数值形式表示该权限,则该八

Linux面试总结分享

假如说职场如战场,那面试就能算得上是在战场扬名立万的第一步.这一步直接影响到你在之后的日子里会接触到什么样的人,要做什么样的事.话说,跟一群干大事的人才能干成大事.如果你被应聘到一家好公司,有比较好的产品,有好的技术团队,那么你在技术方面发展可能很快.反之,如果你被应聘到一家“粪坑”公司,没有团队建设,也没有技术大牛,那么两年后你会发现自己什么都不会,即使两年前你还会一点技术.你在面临房贷.婚姻.孩子的时候,你真的还有财力和精力去频繁跳槽么?所以我们需要找一家好的公司,一家好的公司能成就你,一家

测试开发linux面试之三:后台进程之操作

Hi,大家好我是Tom,继上次分享之后这次给大家带来新的知识. 进程是Linux系统中一个非常重要的概念.Linux是一个多任务的操作系统,系统上经常同时运行着多个进程.我们不关心这些进程究竟是如何分配的,或者是内核如何管理分配时间片的,所关心的是如何去控制这些进程,让它们能够很好地为用户服务. Linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性.交互进程是由一个Shell启动的进程.交互进程既可以在前台运行,也可以在后台运行.批处理进程和终端没有联系,是一个进程序列.监控进

Linux面试必问题,想从事Linux工作这些你会了吗?

笔者其实没有想到去面试,只是在智联上更新了一下简历,就陆陆续续接到很多猎头的邮件和电话,闲话少说,下面就分享给大家Linuxer的面试经历,下面这份是猎头发给我的岗位说明,为了职业道德操守,公司的介绍和面试通知信息我就不贴出来了,我就把岗位要求贴出来: 职位描述: 1. 负责应用服务器的安装.配置.优化与维护: 2. 负责应用系统的日志信息备份.管理.维护与分析: 3. 负责应用系统的日常监测于维护.故障处理.性能分析与优化: 4. 负责应用部署系统.环境配置系统.监控系统的开发.部署.升级与维

Linux 面试

Linux中子进程继承了父进程的哪些资源:A进程地址空间  B共享内存  C信号掩码 D已打开的文件描述符 答:进行fork后子进程将获得父进程几乎所有资源拷贝的副本,继承之后子进程与父进程会共享代码段,编写fork函数的程序便是例子,其他地方不会共享.查阅资料后子进程会继承父进程的进程地址空间.信号掩码.已打开的文件描述符,共享内存我觉得会继承一份,因为子进程也需要自己的共享内存.这样的继承会产生一些问题:比如fork之前曾打开过某个文件,fork后父子进程的文件描述符(用户空间)会指向相同的