linux调度程序是根据进程的动态优先级还是静态优先级来调度进程的,LINUX内核面试题...

该链接有每个题详细的答案讲解http://www.docin.com/p-442803876.html 以下答案可能不是很详细。 1) Linux中主要有哪几种内核锁? Linux的同步机制从2.0到2.6以来不断发展完善。从最初的原子操作,到后来的信号量,从大内核锁到今天的自旋锁。这些同步机制的

该链接有每个题详细的答案讲解http://www.docin.com/p-442803876.html

以下答案可能不是很详细。

1) Linux中主要有哪几种内核锁?

Linux的同步机制从2.0到2.6以来不断发展完善。从最初的原子操作,到后来的信号量,从大内核锁到今天的自旋锁。这些同步机制的发展伴随Linux从单处理器到对称多处理器的过渡;

伴随着从非抢占内核到抢占内核的过度。Linux的锁机制越来越有效,也越来越复杂。

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

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

Linux中的信号量是一种睡眠锁。如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠。这时处理器获得自由去执行其它代码。当持有信号量的进程将信号量释放后,在等待队列中的一个任务将被唤醒,从而便可以获得这个信号量。

信号量的睡眠特性,使得信号量适用于锁会被长时间持有的情况;只能在进程上下文中使用,因为中断上下文中是不能被调度的;另外当代码持有信号量时,不可以再持有自旋锁。

Linux 内核中的同步机制:原子操作、信号量、读写信号量和自旋锁的API,另外一些同步机制,包括大内核锁、读写锁、大读者锁、RCU (Read-Copy Update,顾名思义就是读-拷贝修改),和顺序锁。

2) Linux中的用户模式和内核模式是什么含意?

MS-DOS等操作系统在单一的CPU模式下运行,但是一些类Unix的操作系统则使用了双模式,可以有效地实现时间共享。在Linux机器上,CPU要么处于受信任的内核模式,要么处于受限制的用户模式。除了内核本身处于内核模式以外,所有的用户进程都运行在用户模式之中。

内核模式的代码可以无限制地访问所有处理器指令集以及全部内存和I/O空间。如果用户模式的进程要享有此特权,它必须通过系统调用向设备驱动程序或其他内核模式的代码发出请求。另外,用户模式的代码允许发生缺页,而内核模式的代码则不允许。

在2.4和更早的内核中,仅仅用户模式的进程可以被上下文切换出局,由其他进程抢占。除非发生以下两种情况,否则内核模式代码可以一直独占CPU:

(1) 它自愿放弃CPU;

(2) 发生中断或异常。

2.6内核引入了内核抢占,大多数内核模式的代码也可以被抢占。

3) 怎样申请大块内核内存?

在Linux内核环境下,申请大块内存的成功率随着系统运行时间的增加而减少,虽然可以通过vmalloc系列调用申请物理不连续但虚拟地址连续的内存,但毕竟其使用效率不高且在32位系统上vmalloc的内存地址空间有限。所以,一般的建议是在系统启动阶段申请大块内存,但是其成功的概率也只是比较高而已,而不是100%。如果程序真的比较在意这个申请的成功与否,只能退用“启动内存”(Boot

Memory)。下面就是申请并导出启动内存的一段示例代码:

void* x_bootmem = NULL;

EXPORT_SYMBOL(x_bootmem);

unsigned long x_bootmem_size = 0;

EXPORT_SYMBOL(x_bootmem_size);

static int __init x_bootmem_setup(char *str)

{

x_bootmem_size = memparse(str, &str);

x_bootmem = alloc_bootmem(x_bootmem_size);

printk(“Reserved %lu bytes from %p for x\n”, x_bootmem_size, x_bootmem);

return 1;

}

__setup(“x-bootmem=”, x_bootmem_setup);

可见其应用还是比较简单的,不过利弊总是共生的,它不可避免也有其自身的限制:

内存申请代码只能连接进内核,不能在模块中使用。

被申请的内存不会被页分配器和slab分配器所使用和统计,也就是说它处于系统的可见内存之外,即使在将来的某个地方你释放了它。

一般用户只会申请一大块内存,如果需要在其上实现复杂的内存管理则需要自己实现。

在不允许内存分配失败的场合,通过启动内存预留内存空间将是我们唯一的选择。

4) 用户进程间通信主要哪几种方式?

(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的变种都支持套接字。

5) 通过伙伴系统申请内核内存的函数有哪些?

在物理页面管理上实现了基于区的伙伴系统(zone based buddy system)。对不同区的内存使用单独的伙伴系统(buddy system)管理,而且独立地监控空闲页。相应接口alloc_pages(gfp_mask, order),_ _get_free_pages(gfp_mask, order)等。

6) 通过slab分配器申请内核内存的函数有?

7) Linux的内核空间和用户空间是如何划分的(以32位系统为例)?

8) vmalloc()申请的内存有什么特点?

9) 用户程序使用malloc()申请到的内存空间在什么范围?

10) 在支持并使能MMU的系统中,Linux内核和用户程序分别运行在物理地址模式还是虚拟地址模式?

11) ARM处理器是通过几级也表进行存储空间映射的?

12) Linux是通过什么组件来实现支持多种文件系通的?

13) Linux虚拟文件系统的关键数据结构有哪些?(至少写出四个)

struct super_block,struct inode,struct file,struct dentry;

14) 对文件或设备的操作函数保存在那个数据结构中?

struct file_operations

15) Linux中的文件包括哪些?

执行文件,普通文件,目录文件,链接文件和设备文件,管道文件。

16) 创建进程的系统调用有那些?

clone(),fork(),vfork();系统调用服务例程:sys_clone,sys_fork,sys_vfork;

17) 调用schedule()进行进程切换的方式有几种?

1.系统调用 do_fork();

2.定时中断 do_timer();

3.唤醒进程 wake_up_process

4.改变进程的调度策略 setscheduler();

5.系统调用礼让 sys_sched_yield();

18) Linux调度程序是根据进程的动态优先级还是静态优先级来调度进程的?

Liunx调度程序是根据根据进程的动态优先级来调度进程的,但是动态优先级又是根据静态优先级根据算法计算出来的,两者是两个相关联的值。因为高优先级的进程总是比低优先级的进程先被调度,为防止多个高优先级的进程占用CPU资源,导致其他进程不能占有CPU,所以引用动态优先级概念

19) 进程调度的核心数据结构是哪个?

struct runqueue

20) 如何加载、卸载一个模块?

insmod加载,rmmod卸载

21) 模块和应用程序分别运行在什么空间?

模块运行在内核空间,应用程序运行在用户空间

22) Linux中的浮点运算由应用程序实现还是内核实现?

应用程序实现,Linux中的浮点运算是利用数学库函数实现的,库函数能够被应用程序链接后调用,不能被内核链接调用。这些运算是在应用程序中运行的,然后再把结果反馈给系统。Linux内核如果一定要进行浮点运算,需要在建立内核时选上math-emu,使用软件模拟计算浮点运算,据说这样做的代价有两个:用户在安装驱动时需要重建内核,可能会影响到其他的应用程序,使得这些应用程序在做浮点运算的时候也使用math-emu,大大的降低了效率。

23) 模块程序能否使用可链接的库函数?

模块程序运行在内核空间,不能链接库函数。

24) TLB中缓存的是什么内容?

TLB,页表缓存,当线性地址被第一次转换成物理地址的时候,将线性地址和物理地址的对应放到TLB中,用于下次访问这个线性地址时,加快转换速度。

25) Linux中有哪几种设备?

字符设备和块设备。网卡是例外,他不直接与设备文件对应,mknod系统调用用来创建设备文件。

26) 字符设备驱动程序的关键数据结构是哪个?

字符设备描述符struct cdev,cdev_alloc()用于动态的分配cdev描述符,cdev_add()用于注册一个cdev描述符,cdev包含一个struct kobject 类型的数据结构它是核心的数据结构

27) 设备驱动程序包括哪些功能函数?

open(),read(),write(),llseek(),realse();

28) 如何唯一标识一个设备?

Linux使用一个设备编号来唯一的标示一个设备,设备编号分为:主设备号和次设备号,一般主设备号标示设备对应的驱动程序,次设备号对应设备文件指向的设备,在内核中使用dev_t来表示设备编号,一般它是32位长度,其中12位用于表示主设备号,20位用于表示次设备号,利用MKDEV(int

major,int minor);用于生成一个dev_t类型的对象。

29) Linux通过什么方式实现系统调用?

靠软件中断实现的,首先,用户程序为系统调用设置参数,其中一个编号是系统调用编号,参数设置完成后,程序执行系统调用指令,x86上的软中断是有int产生的,这个指令会导致一个异常,产生一个事件,这个事件会导致处理器跳转到内核态并跳转到一个新的地址。并开始处理那里的异常处理程序,此时的异常处理就是系统调用程序。

30) Linux软中断和工作队列的作用是什么?

Linux中的软中断和工作队列是中断处理。

1.软中断一般是“可延迟函数”的总称,它不能睡眠,不能阻塞,它处于中断上下文,不能进城切换,软中断不能被自己打断,只能被硬件中断打断(上半部),可以并发的运行在多个CPU上。所以软中断必须设计成可重入的函数,因此也需要自旋锁来保护其数据结构。

2.工作队列中的函数处在进程上下文中,它可以睡眠,也能被阻塞,能够在不同的进程间切换。已完成不同的工作。

可延迟函数和工作队列都不能访问用户的进程空间,可延时函数在执行时不可能有任何正在运行的进程,工作队列的函数有内核进程执行,他不能访问用户空间地址。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505064.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 自定义控件的宽高_巧用Handler获取View控件信息

众所周知,在Android实际开发中,对于某些复杂多变的情况,控件的位置摆放、大小控制并非是xml类型的layout文件完全可以搞定的。此时,我们通常会使用Java代码来通过动态计算,将指定的控件摆放在相应的位置,并…

ascii码01100001_ASCII码跟数字

小小乌龟把头藏: - - 我竟无言以对!举个例子嘛,本质是这样,你还是把C语言基础什么的看几遍吧。给你摘录一点书上的,估计你更能看懂:计算机是以二进制的形式来存储数据的,它只认识0和1两个数字,我…

深度linux缺点,原来国产深度系统有这些“缺陷”,难怪只有少数人在使用!

相信大家或多或少都听说过USO统一操作系统,一款可以支持多款国产芯片的国产操作系统。该系统从公布直至到现在,它一直保持着非常高的关注度。但是,有些用户认为该系统只不是Deepin换了壳而已。从系统界面来看,UOS和Deepin的确非常…

如何ping端口_干货 | 如何正确处理常见的8大网络故障

网络故障是最容易出现的,也是比较难解决的问题,尤其是经常跟电脑及交换机打交道的朋友。今天就和大家来说说日常工作中,常见的网络故障详细分析及解决方法。交换机刚加电时网络无法通信【故障现象】交换机刚刚开启的时候无法连接至其他网络&a…

前端vue显示柱状图_Vue—Echarts 柱状图

使用Vue做后台管理系统的时候避免不了使用Echarts来展示对应的数据,下面是使用Echarts柱状图来展示对应数据的实例。ee05abaf9633184a9c012631b642d970.png使用npm安装Echartsnpm install echarts --save在man.js中引入对应的echartsimport ECharts from vue-echart…

c语言程序设计第2章,C语言程序设计第2章 结构化程序设计与算法.ppt

C语言程序设计第2章 结构化程序设计与算法.ppt现在人们公认的具有“良好风格”的程序设计方法之一是所谓的“结构化程序设计方法”。其核心是规定了算法的三种基本结构顺序结构、选择结构和循环结构。按照结构化程序设计的观点,任何算法功能都可以通过三种基本程序结…

python读取word指定内容_python读取word 中指定位置的表格及表格数据

1.Word文档如下:2.代码 # -*- coding: UTF-8 -*- from docx import Document def readSpecTable(filename, specText): document Document(filename) paragraphs document.paragraphs allTables document.tables specText specText.encode(utf-8).decode(utf-8)…

xml建模包括以下_为什么要进行建模仿真?

没有“模型”作为基础的话,很多当今的前沿概念将无法真正落地!今天,数字孪生、人工智能、工业互联网、边缘计算这些概念在整个产业里非常的火热,但是,要知道,如果这些概念没有“模型”作为基础的话&#xf…

中兴没有云服务器_中国移动携手中兴通讯推进5G网络云建设

11月23日消息今年8月,中国移动通信集团公司党组成员、副总裁李慧镝在“中国信息化百人会2020年峰会”上表示,中国移动正大力推进网络云化部署,实现云网融合,NFV网络云服务器规模达6万台。2020北京国际信息通信展期间,中…

c语言乘法表只有结果,要求输出结果显示相乘的两数及乘积怎么做?

1。#includevoid main(){int i,j;printf("* ");for(i1;i10)printf("%d ",i*j);else printf("%d ",i*j);}printf("\n");}}2。#includevoid main(){int k,m,n,days;printf("请输入树的高度Kcm:");scanf("%d",&k…

差异基因 p log2foldchange_拟南芥的基因ID批量转换?差异基因,GO/KEGG数据库注释(转录组直接送你全套流程)...

新手遇到的问题都是类似的,比如批量ID转换虽然我写过大量的教程:ID转换大全 不过都需要R基础,因为是大批量转换啊!但热心肠的植物生物信息学教学大佬还是友善的给出了解决方案我也狗尾续貂制作了一个网页工具教程:简…

c语言实现顺序表源程序,C语言实现静态顺序表的实例详解

C语言实现静态顺序表的实例详解线性表定义一张顺序表也就是在内存中开辟一段连续的存储空间,并给它一个名字进行标识。只有定义了一个顺序表,才能利用该顺序表存放数据元素,也才能对该顺序表进行各种操作。接下来看看静态的顺序表&#xff0c…

证明最小码距与纠检错图像_最小码距和检错纠错能力关系

最小码距和检错纠错能力关系一、码距?码距就是两个码字C1与C2之间不同的比特数。如:1100与1010的码距为2;1111与0000的码距为4。一个编码系统的码距就是整个编码系统中任意(所有)两个码字的最小距离。若一个编码系统有四种编码分别为:0000&am…

mongoose 批量修改字段_WordPress图片路径批量替换方法

不少数站长在使用WordPress博客或者搬家时,需要把WordPress文章中的图片路径进行替换来解决图片不显示的问题。总结一下WP图片路径批量替换的过程,方便有此类需求的站长们学习。什么情况下批量替换图片路径1、更换了网站域名有许多网站建设初期都随便选择…

c语言 静态变量 初始化,c – 静态变量初始化两次

考虑到我在编译单元中有一个静态变量,最后在静态库libA中.然后我有另一个编译单元访问这个变量,最终在一个共享库libB.so(所以libA必须链接到libB).最后,我有一个主要功能也直接从A访问静态变量,并具有对libB的依赖(所以我链接到libA和libB).我然后观察,静态变量被初始化了两次…

ebs 供应商地点信息_供应商,地址,业务实体,地点关联银行账户

在此记录一下自己学习过程。新手,请多多指教,谢谢。最近客户有需求,找出供应商对应的银行信息,查看了下网上帖子,发现都是从供应商及供应商地点层发起,去查找对应的银行信息,但是,供…

c语言递归函数检测回文,递归法判断回文字符串,急用

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼/*--------用线性表存储字符串,结合堆栈判断回文(关键判断个数为奇或偶,奇跳过中间数据)---------*/#include #include #define ok 1;#define error 0;typedef char elemtype;typedef struct lnode{lnode *n…

python vector_50行Python代码实现经典游戏,不仅是划水神器,更是学习利器!

Free Python Games非常适合学生,它不仅具有高度的组织性和灵活性,而且能够激发人们探索和理解能力。--Terri FurtonFree Python Games在轻松的环境中把游戏和学习结合在一起,从而减轻了编程过程中的压力。--Brett Bymaster...贪吃蛇、迷宫、吃…

r roc函数_画ROC曲线的R包总结

原标题:画ROC曲线的R包总结作者: Joseph Rickert原文链接:https://rviews.rstudio.com/2019/03/01/some-r-packages-for-roc-curves/在这篇文章中,我将描述如何在CRAN中搜索绘制ROC曲线的包,并强调六个有用的包。虽然一…

c语言出圈游戏课设报告,c语言作业 出圈游戏

#include//头函数#include#include#define SIZE 100struct SeqList{int num;char name[10];};int menu_select();//函数声明部分void Joseph1();void Joseph2();void Joseph3();void Joseph4();void Joseph(struct SeqList *p,int length);void main() //主要程序段{printf(&qu…