深圳市澳门沙金网址js500,金沙990登录入口介绍,金沙官方登录入口半导体科技有限公司专业半导体测试分选设备研发、设计、制造、销售与服务!

服务咨询热线:

0752-5880-900(8280)
$(".nav li").hover(function() { $(this).find(".sedNav").stop(true, true).slideDown(); }, function() { $(this).find(".sedNav").stop(true, true).slideUp(); }); // JavaScript Document var curUrl = location.pathname.substr(1); if (curUrl.indexOf("news-4723-0.html") > -1) { document.getElementById('zz1').className = " on"; }; if (curUrl.indexOf("news-4724-0.html") > -1) { document.getElementById('zz2').className = " on"; }; if (curUrl.indexOf("news-4725-0.html") > -1) { document.getElementById('zz3').className = " on"; };
4新闻中心
您的位置: 首页 > 新闻资讯 > 公司动态

新加坡金沙娱乐场大厂面试路上的阻碍-Linux内核面试题(含答案)

文章出处:网络 责任编辑:深圳市澳门沙金网址js500,金沙990登录入口介绍,金沙官方登录入口半导体科技有限公司 发表时间:2024-01-04
 

  新加坡金沙娱乐场大厂面试路上的阻碍-Linux内核面试题(含答案)clone(),fork(),vfork();体例移用任事例程:sys_clone,sys_fork,sys_vfork;

  1.体例移用 do_fork(); 2.按时结束 do_timer(); 3.叫醒历程 wake_up_process 4.转换历程的更改政策 setscheduler(); 5.体例移用礼让 sys_sched_yield();

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

  7.Linux 的内核空间和用户空间是怎么划分的(以 32 位体例 为例)?

  MS-DOS 等操作体例正在简单的 CPU 形式下运转,然则少许类 Unix 的操作体例则使 用了双形式★★,能够有用地告终时刻共享。正在 Linux 呆板上,CPU 要么处于受信赖 的内核形式,要么处于受限度的用户形式。除了内核自己处于内核形式以外,所 有的用户历程都运转正在用户形式之中。 内核形式的代码能够无穷度地拜望统统管束器指令集以及统共内存和 I/O 空间。 假如用户形式的历程要享有此特权,它务必通过体例移用向修立驱动措施或其他 内核形式的代码发出哀告。其它★★,用户形式的代码承诺发作缺页,而内核形式的 代码则不承诺。 正在 2.4 和更早的内核中★★,仅仅用户形式的历程能够被上下文切换出局,由其他进 程抢占。除非发作以下两种景况,不然内核形式代码能够不停私有 CPU: (1) 它自觉放弃 CPU; (2) 发作结束或卓殊。 2.6 内核引入了内核抢占,大大批内核形式的代码也能够被抢占。

  2.5.dma_alloc_coherent ma_addr_t *dma_handle, gfp_t gfp) 2.6.ioremap ioremap 是一种更直接的内存“分拨”方法,应用时直接指定物理开始地点和需 要分拨内存的巨细★★,然后将该段 物理地点照射到内核地点空间。ioremap 用到 的物理地点空间都是事先确定的,和上面的几种内存 分拨方法并不太相同★,并 不是分拨一段新的物理内存。ioremap 众用于修立驱动,能够让 CPU 直接拜望外 部修立的 IO 空间。ioremap 能照射的内存由原有的物理内存空间决策,于是没 有实行测试。 假如要分拨豪爽的贯串物理内存★★,上述的分拨函数都不行餍足,就只可用对比特 殊的方法, void* alloc_bootmem(unsigned long size) 2.7.2.通过内核指示参数预留顶部内存 3.几种分拨函数的对比 __get_free_pages 直接对页框实行操作 4MB 实用于分拨较豪爽的贯串物理内存 kmalloc 基于 kmem_cache_alloc 告终 128KB 最常睹的分拨方法,须要小于页框 巨细的内存时能够应用 dma_alloc_coherent 基于__alloc_pages 告终 4MB 实用于 DMA 操 作 alloc_bootmem 正在启动 kernel 时,预留一段内存,内核看不睹小于物理内存大 小,内存统治央浼较高。

  音问 Message)部队:音问部队是音问的链接外,包罗 Posix 音问部队 system V 音问部队。有足够权限的历程能够向部队中增添音问,被授予读权限的历程则 能够读走部队中的音问。

  正在 Linux 内核处境下,申请大块内存的凯旋率跟着体例运转时刻的增长而省略★★, 固然能够通过 vmalloc 系列移用申请物理不贯串但虚拟地点贯串的内存,但终究 其应用恶果不高且正在 32 位体例上 vmalloc 的内存地点空间有限。于是,大凡的 倡导是正在体例启动阶段申请大块内存,然则其凯旋的概率也只是对比高云尔,而不是100%★。假如措施真的对比正在意这个申请的凯旋与否,只可退用“启动内 存”Boot Memory)。

  Linux 中采用 4KB 巨细的 页框动作程序的内存分拨单位。 1.1.伙伴体例算法 为了避免产生这种景况★★,Linux 内核中引入了伙伴体例算法(buddy system)★。把 统统的空闲页框分组为 11 个 块链外,每个块链外区别包蕴巨细为 1,2,4,8, 16★★,32,64,128,256,512 和 1024 个贯串页框的页框块。最大能够申请 1024 个连 续页框,对应 4MB 巨细的贯串内存★★。

  靠软件结束告终的★★,开始,用户措施为体例移用设立参数,个中一个编号是体例 移用编号,参数设立告终后,措施践诺体例移用指令,x86 上的软结束是有 int 出现的,这个指令会导致一个卓殊,出现一个事项,这个事项会导致管束器跳转 到内核态并跳转到一个新的地点。并起先管束那里的卓殊管束措施★★,此时的卓殊 管束便是体例移用措施。

  13. Linux 虚拟文献体例的闭节数据机闭有哪些★★?(起码写出 四个)

  1. 道理讲明 * 页全体目次(Page Global Directory) * 页中央目次(Page Middle Directory) 页全体目次包蕴若干页上司目次的地点★★,页上司目次又循序包蕴若干页中央目次 的地点★★,每一个页外项指 向一个页框。

  字符修立描画符 struct cdev,cdev_alloc()用于动态的分拨 cdev 描画符, cdev_add()用于注册一个 cdev 描画符,cdev 包蕴一个 struct kobject 类型的 数据机闭它是重点的数据机闭★。

  字符修立和块修立。网卡是不同★★,他不直接与修立文献对应,mknod 体例移用用 来创修修立文献★★。

  void *kmalloc(size_t size, gfp_t flags) 2.4.vmalloc 前面几种内存分拨方法都是物理贯串的,能包管较低的均匀拜望时刻★★。然则正在某 些形势中,对内存区的哀告不是很一再★,较高的内存拜望时刻也 能够经受,这 是就能够分拨一段线性贯串★★,物理不贯串的地点,带来的好处是一次能够分拨较 大块的内存。

  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, 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);

  Liunx 更改措施是遵循遵循历程的动态优先级来更改历程的,然则动态优先级又 是遵循静态优先级遵循算法策动出来的,两者是两个闭联联的值。

  struct runqueue, struct task_struct, struct sched_struct

  由于高优先级 的历程老是比低优先级的历程先被更改,为提防众个高优先级的历程占用 CPU 资 源,导致其他历程不行拥有 CPU,于是援用动态优先级观点。

  正在不承诺内存分拨腐臭的形势,通过启动内 存预留内存空间将是咱们独一的选拔。

  TLB,页外缓存,当线性地点被第一次转换成物理地点的功夫,将线性地点和物 理地点的对应放到 TLB 中新加坡金沙娱乐场★,用于下次拜望这个线性地点时★★,加快转换速率。

  10.正在援助并使能 MMU 的体例中★★,Linux 内核和用户措施分 别运转正在物理地点形式照旧虚拟地点形式?

  Linux 内核假如肯定要实行浮点运算,须要正在修树内核 时选上 math-emu,应用软件模仿策动浮点运算,传说如许做的价格有两个:用户 正在装置驱动时须要重修内核,大概会影响到其他的行使措施,使得这些行使措施 正在做浮点运算的功夫也应用 math-emu,大大的消重了恶果★。

  可睹其行使照旧对比简略的,但是利弊老是共生的,它不行避免也有其自己的限度:内存申请代码只可连绵进内核★★,不行正在模块中应用。被申请的内存不会被页分拨 器和 slab 分拨器所应用和统计,也便是说它处于体例的可睹内存除外★,纵使正在 异日的某个地方你开释了它。大凡用户只会申请一大块内存★,假如须要正在其上实 现庞大的内存统治则须要我方告终★。

  】料理了少许片面以为对比好的进修书本、视频原料共享正在群文献内里,有须要的能够自行增添哦★!★!★!前100名进群领取,特别赠送一份代价

  信号量 semaphore):苛重动作历程间以及统一历程差异线程之间的同步技术。

  软结束大凡是“可延迟函数”的总称,它不行睡眠★,不行滞碍,它处于结束上 下文,不行进城切换★,软结束不行被我方打断★,只可被硬件结束打断(上半部), 能够并发的运转正在众个 CPU 上。于是软结束务必计划成可重入的函数,于是也需 要自旋锁来维护其数据机闭。

  Linux 应用一个修立编号来独一的标示一个修立,修立编号分为:主修立号和次 修立号,大凡主修立号标示修立对应的驱动措施,次修立号对应修立文献指向的 修立,正在内核中应用 dev_t 来外现修立编号,大凡它是 32 位长度★,个中 12 位用 于外现主修立号,20 位用于外现次修立号★★,诈骗 MKDEV(int major,int minor); 用于天生一个 dev_t 类型的对象。

  职业部队中的函数处正在历程上下文中,它能够睡眠,也能被滞碍,可能正在差异 的历程间切换★。已告终差异的职业。 可延迟函数和职业部队都不行拜望用户的历程空间,可延时函数正在践诺时不大概 有任何正正在运转的历程,职业部队的函数有内核历程践诺,他不行拜望用户空间 地点★★。

  每个页框块的第一个页框的物理地点 是该块巨细的整数倍★★。 页框块正在开释时★, slab 分拨器源于 Solaris 2.4 的 分拨算法,职业于物理内存页框分拨器之上★, 统治特定巨细对象的缓存★★,实行速捷而高效的内存分拨。

  Linux 的同步机制从 2.0 到 2.6 以后连接生长完满。从最初的原子操作,到其后 的信号量,从大内核锁到这日的自旋锁。这些同步机制的生长陪同 Linux 从单处 理器到对称众管束器的过渡;伴跟着从非抢占内核到抢占内核的过分。Linux 的 锁机制越来越有用★,也越来越庞大。 自旋锁最众只可被一个可践诺线程持有★,假如一个践诺线程试图哀告一个已被争 用依然被持有)的自旋锁,那么这个线程就会不停实行忙轮回——挽救——守候 锁从新可用★★。若是锁未被争用,哀告它的践诺线程便能立时取得它而且持续实行★。 自旋锁能够正在任何光阴提防众于一个的践诺线程同时进入临界区。 信号量的睡眠性格★★,使得信号量实用于锁会被长时刻持有的景况;只可正在历程上 下文中应用,由于结束上下文中是不行被更改的;其它现代码持有信号量时★★,不 能够再持有自旋锁。 Linux 内核中的同步机制:原子操作、信号量、读写信号量和自旋锁的 API★★,另 外少许同步机制★,包罗大内核锁、读写锁、大读者锁、RCU (Read-Copy Update★★, 顾名思义便是读-拷贝点窜),和次第锁★★。

  开始用 kmem_cache_create 创 修一个高速缓存区域,然后用 kmem_cache_alloc 从 该高速缓存区域中获取新的 内存块。kmem_cache_alloc 一次能分拨的最大内存由 mm/slab.c 文献中的 MAX_OBJ_ORDER 宏界说,正在默认的 2.6.18 内核版本中★★,该宏界说为 5★,于是一次最众能申请 15 * 4KB 也便是 128KB 的贯串物理内存。分解内核源码浮现, kmem_cache_create 函数的 size 参数大于 128KB 时会移用 BUG()。测试结果验证 了分解结果,用 kmem_cache_create 分拨越过 128KB 的内存时使内核溃败★。

  管道 Pipe):管道可用于具有亲缘干系历程间的通讯★,承诺一个历程和另一个 与它有协同祖宗的历程之间实行通讯

  套接字 Socket):更为大凡的历程间通讯机制,可用于差异呆板之间的历程间 通讯。早先是由 Unix 体例的 BSD 分支开拓出来的★,但现正在大凡能够移植到其它 类 Unix 体例上:Linux 和 System V 的变种都援助套接字★。

  信号 Signal):信号是对比庞大的通讯方法,用于通告经受历程有某种事项发 生,除了用于历程间通讯外,历程还能够发送信号给历程自己;linux 除了援助 Unix 早期信号语义函数 sigal 外,还援助语义切合 Posix.1 程序的信号函数 sigaction 本质上,该函数是基于 BSD 的★,BSD 为了告终牢靠信号机制,又可能 同一对外接口,用 sigaction 函数从新告终了 signal 函数)。

  定名管道 named pipe):定名管道抑制了管道没驰名字的限度,于是★,除具有 管道所具有的性能外★★,它还承诺无亲缘干系历程间的通讯。定名管道正在文献体例 中有对应的文献名。定名管道通过号召 mkfifo 或体例移用 mkfifo 来创修。

  18.Linux 更改措施是遵循历程的动态优先级照旧静态优先级 来更改历程的★★?

  行使措施告终,Linux 中的浮点运算是诈骗数学库函数告终的,库函数可能被应 用措施链接后移用,不行被内核链接移用★。这些运算是正在行使措施中运转的,然 后再把结果反应给体例。

  音问部队抑制了信号承载消息量少,管道只可承载无格 式字节约以及缓冲区巨细受限等缺

  图 3-1 外 示的是 vmalloc 分拨的内存应用的地点周围。vmalloc 对 一次能分拨的内存巨细没有明了限度★★。出于机能探讨,应小心应用 vmalloc 函数★★。 正在测试进程中, 最大能一次分拨 1GB 的空间。

  struct super_block struct inode struct file struct dentry;

  (3)个人职工攀比思念紧张,总以为我方为病院功勋众,而取得少★★,与那些一天无所事事的职工收入相差无几,所以产生职业不敷热中★,踊跃性不高,任事立场差,如许则全体人的思念产生缓和景况,易导致各式医疗事情的发作★★。

深圳市澳门沙金网址js500,金沙990登录入口介绍,金沙官方登录入口半导体科技有限公司 Copyright 2021 【后台管理】 粤ICP备19146837号
咨询
document.oncontextmenu=new Function("event.returnValue=false"); document.onselectstart=new Function("event.returnValue=false"); if (!window.jQuery) { document.write(unescape("%3Cscript src='/public/static/common/js/jquery.min.js' type='text/javascript'%3E%3C/script%3E")); document.write(unescape("%3Cscript type='text/javascript'%3E try{jQuery.noConflict();}catch(e){} %3C/script%3E")); } if (window.jQuery) { (function($){ default_switch(); //简体繁体互换 function default_switch() { var home_lang = getCookie('home_lang'); if (home_lang == '') { home_lang = 'cn'; } if ($.inArray(home_lang, ['zh','cn'])) { var obj = $('#jquerys2t_1573822909'); var isSimplified = getCookie('jquerys2t_1573822909'); if ('cn' == isSimplified) { $('body').t2s(); $(obj).text('繁體'); } else if ('zh' == isSimplified) { $('body').s2t(); $(obj).text('简体'); } } } //简体繁体互换 $('#jquerys2t_1573822909').click(function(){ var obj = this; var isSimplified = getCookie('jquerys2t_1573822909'); if ('' == isSimplified || 'cn' == isSimplified) { $('body').s2t(); // 简体转繁体 setCookie('jquerys2t_1573822909', 'zh'); $(obj).text('简体'); } else { $('body').t2s(); // 繁体转简体 setCookie('jquerys2t_1573822909', 'cn'); $(obj).text('繁體'); } }); })(jQuery); }