面试题整理001

1 文件描述符:在linux系统中,每个进程在PCB(Process Control Block)中保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针。文件描述符的优点:兼容POSIX标准,许多Linux和UNIX系统调用都依赖于它。文件描述符的缺点:不能移植到UNIX以外的系统上去,也不直观。

文件指针:C语言中使用的是文件指针而不是文件描述符做为I/O的句柄。文件指针指向进程用户区中的一个被称为FILE结构的数据结构。FILE结构包括一个缓冲区和一个文件描述符。而文件描述符是文件描述符表的一个索引。

2 ※函数库调用 VS 系统调用
函数库调用
系统调用
在所有的ANSI C编译器版本中,C库函数是相同的 各个操作系统的系统调用是不同的
它调用函数库中的一段程序(或函数) 它调用系统内核的服务
与用户程序相联系 是操作系统的一个入口点
在用户地址空间执行 在内核地址空间执行
它的运行时间属于“用户时间” 它的运行时间属于“系统”时间
属于过程调用,调用开销较小 需要在用户空间和内核上下文环境间切换,开销较大
在C函数库libc中有大约300个函数 在UNIX中大约有90个系统调用
典型的C函数库调用:system fprintf malloc 典型的系统调用:chdir fork write brk;
3 进程:程序的一次执行;线程:进程内的一个执行单元,可调度的实体;

区别:(1)地址空间:进程有自己独立的地址空间;线程共享进程的地址空间;

            (2)资源:进程是资源分配和拥有的独立单位,同一个进程内的线程共享进程的资源;

          (3)线程是处理器调度的基本单元,进程不是;

              .线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈);

          (4)在并发的开销方面,线程比进程开销小,这样提高了资源的吞吐量;

4LINUX中的文件类型
d  目录文件
l  符号链接(指向另一个文件,类似于瘟下的快捷方式)
s  套接字文件
b  块设备文件
c  字符设备文件
p  命名管道文件(FIFO文件)

普通文件(文本文件和二进制文件):

虚拟地址:指的是由程序产生的由段选择符和段内偏移地址两个部分组成的地址。

逻辑地址:指由程序产生的与段相关的偏移地址部分。

线性地址:指的是虚拟地址到物理地址变换之间的中间层,是处理器可寻指的内存空间(称为线性地址空间)中的地址。程序代码会产生逻辑地址,或者说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。如果启用了分页机制,那么线性地址可以再经过变换产生物理地址。若是没有采用分页机制,那么线性地址就是物理地址。

物理地址:指的是现在CPU外部地址总线上的寻址物理内存的地址信号;

Memory Mangement Unit负责从虚拟地址到物理地址的转化。逻辑地址是段标识+段内偏移量的形式,MMU通过查询段表,可以把逻辑地址转化为线性地址

cpu开启了分页功能,MMU还需要查询页表来将线性地址转化为物理地址:逻辑地址 ----(段表)---> 线性地址 — (页表)—> 物理地址

6  硬链接:只能应用于文件,而不能应用于目录,而且不能跨文件系统;
   符号链接:可以应用于文件,而且可以应用于目录和可跨文件系统,相当于快捷方式;
硬链接会使用和文件相同的inode号,会有不同的文件名;
软链接会使用一个新的inode,所以软链接的inode号和文件的inode号不同,软链接的inode里存放着指向文件的路径,删除文件,软链接也无法使用了,因为文件的路径不存在了。
7 同步I/O 线程启动一个IO操作然后就立即进入等待状态,直到IO操作完成后才醒来继续执行。
 异步I/O线程发送一个IO请求到内核,然后继续处理其他的事情,内核完成IO请求后,将会通知线程IO操作完成了。
linux中的I/O:同步阻塞I/O,同步非阻塞I/O,异步阻塞,异步非阻塞;
选择同步和异步的参考:并发数量:
                                           接收字节数:
                                          处理请求所需要的CPU时间:
8 linux中文件I/O和标准I/O 两者的区别:

1)前者属于低级IO,后者是高级IO。

2)前者返回一个文件描述符(用户程序区的),后者返回一个文件指针。

3)前者无缓冲,后者有缓冲。
4)前者与 read, write 等配合使用, 后者与 fread, fwrite等配合使用。
5)后者是在前者的基础上扩充而来的,在大多数情况下,用后者。


9 linux多线程同步的方式:线程的最大特点是资源的共享性,但资源共享中的同步问题是多线程编程的难点。

 临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。
 互斥量:为协调共同对一个共享资源的单独访问而设计的。
 信号量:为控制一个具有有限数量用户资源而设计。
 事件:用来通知线程有一些事件已发生,从而启动后继任务的开始。

条件变量:利用共享的全局变量提供的一种机制,条件变量上的基本操作触发条件,等待条件,挂起线程知道其他线程触发条件;

10 linux进程间同步的方式:

原子操作:该操作绝不会在执行完毕前被任何其他任务或事件打断原子操作需要硬件的支持,因此是架构相关的,它们都使用汇编语言实现。

信号量:信号量在创建时需要设置一个初始值,表示同时可以有几个任务可以访问该信号量保护的共享资源,初始值为1就变成互斥锁(Mutex)。

自旋锁:自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁。

如果被保护的共享资源只在进程上下文访问,使用信号量保护该共享资源非常合适,如果对共享资源的访问时间非常短,自旋锁也可以。但是如果被保护的共享资源需要在中断上下文访问(包括底半部即中断处理句柄和顶半部即软中断)(因为无法中断已睡眠的进程),就必须使用自旋锁。

linux内核同步方法:原子操作、自旋锁、读-写自旋锁、信号量、读-写信号量、完成变量、BKL、禁止抢占(preemp_disable()、preemp_enable())








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值