(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 的变种都支持套接字 。
5) 通过伙伴系统申请内核内存的函数有哪些?在物理页面管理上实现了基于区的伙伴系统(zone based buddy system) 。对不同区的内存使用单独的伙伴系统(buddy system)管理,而且独立地监控空闲页 。相应接口alloc_pages(gfp_mask, order),_ _get_free_pages(gfp_mask, order)等 。
6) Linux 虚拟文件系统的关键数据结构有哪些?(至少写出四个)struct super_block,struct inode,struct file,struct dentry;
7) 对文件或设备的操作函数保存在哪个数据结构中?struct file_operations
8) Linux 中的文件包括哪些?执行文件,普通文件,目录文件,链接文件和设备文件,管道文件 。
9) 创建进程的系统调用有哪些?clone(),fork(),vfork();系统调用服务例程:sys_clone,sys_fork,sys_vfork;
10) 调用 schedule()进行进程切换的方式有几种?1.系统调用 do_fork();
2.定时中断 do_timer();
3.唤醒进程 wake_up_process
4.改变进程的调度策略 setscheduler();
5.系统调用礼让 sys_sched_yield();
11) Linux 调度程序是根据进程的动态优先级还是静态优先级来调度进程的?Liunx 调度程序是根据根据进程的动态优先级来调度进程的,但是动态优先级又是根据静态
优先级根据算法计算出来的,两者是两个相关联的值 。因为高优先级的进程总是比低优先级的进程先被调度,为防止多个高优先级的进程占用 CPU 资源,导致其他进程不能占有 CPU,所以引用动态优先级概念
12) 进程调度的核心数据结构是哪个?struct runqueue
13) 如何加载、卸载一个模块?insmod 加载,rmmod 卸载
14) 模块和应用程序分别运行在什么空间?模块运行在内核空间,应用程序运行在用户空间
15) Linux 中的浮点运算由应用程序实现还是内核实现?应用程序实现,Linux 中的浮点运算是利用数学库函数实现的,库函数能够被应用程序链接后调用,不能被内核链接调用 。这些运算是在应用程序中运行的,然后再把结果反馈给系统 。Linux 内核如果一定要进行浮点运算,需要在建立内核时选上 math-emu,使用软件模拟计算浮点运算,据说这样做的代价有两个:用户在安装驱动时需要重建内核,可能会影响到其他的应用程序,使得这些应用程序在做浮点运算的时候也使用 math-emu,大大的降低了效率 。
16) 模块程序能否使用可链接的库函数?模块程序运行在内核空间,不能连接库函数 。
17) TLB 中缓存的是什么内容?TLB,页表缓存,当线性地址被第一次转换成物理地址的时候,将线性地址和物理地址的对应放到 TLB 中,用于下次访问这个线性地址时,加快转换速度 。
18) Linux 中有哪几种设备?字符设备和块设备 。网卡是例外,它不直接与设备文件对应,mknod 系统调用用来创建设备文件 。
19) 字符设备驱动程序的关键数据结构是哪个?字符设备描述符 struct cdev,cdev_alloc()用于动态的分配 cdev 描述符,cdev_add()用于注册一个 cdev 描述符,cdev 包含一个 struct kobject 类型的数据结构它是核心的数据结构
20) 设备驱动程序包括哪些功能函数?open(),read(),write(),llseek(),realse();
21) 如何唯一标识一个设备?Linux 使用一个设备编号来唯一的标示一个设备,设备编号分为:主设备号和次设备号,一般主设备号标示设备对应的驱动程序,此设备号对应设备文件指向的设备,在内核中使用 dev_t 来表示设备编号,一般它是 32 位长度,其中 12 位用于表示主设备号,20 位用于表示此设备号,利用 MKDEV(int major,int minor);用于生成一个 dev_t 类型的对象 。
推荐阅读
- 怎么提升Linux性能,看完这篇文章,彻底掌握"平均负载"
- Linux下Oracle监听无法启动处理
- 果粉桌面三件套:打造属于自己的品质桌面
- linux下高并发服务器实现
- Linux引导101
- 20 个 Linux 终端下的生产力工具
- 淘宝佣金比例设置方法 卖家在设置淘宝客的佣金比例时要注意哪些方面
- Linux 中软链接和硬链接的区别
- LINUX系统和Unix系统有什么区别和联系呢?
- 解析10个JavaScript笔试题