ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:46.77KB ,
资源ID:4425929      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4425929.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Linux复习汇总.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Linux复习汇总.docx

1、Linux复习汇总第一章 概述1、什么是POSIX标准,为什么现代造作系统的设计必须遵循POSIX标准?答:POSIX表示可移植操作系统接口(Portable Operating System Interface)。POSIX是在Unix标准化过程中出现的产物。POSIX 1003.1标准定义了一个最小的Unix操作系统接口。任何操作系统只有符合这一标准,才有可能运行Unix程序。2、什么是GNU?Linux与GNU有什么关系?答:GNU是GNU Is Not Unix的递归缩写,是自由软件基金会的一个项目。GNU项目产品包括emacs编辑器、著名的GNU C和Gcc编译器等,这些软件叫做GN

2、U软件。GNU软件和派生工作均适用GNU通用公共许可证,即GPL(General Public License)。Linux的开发使用了众多的GUN工具。3、Linux系统由哪些部分组成?Linux内核处于什么位置?答:(1)符合POSIX标准的操作系统内核、Shell和外围工具。(2)C语言编译器和其他开发工 具及函数库。(3)X Window窗口系统。(4)各种应用软件,包括字处理软件、图象处理软件等。Linux内核是所有Linux 发布版本的核心。4、了解Linux内核源代码结构,说明/kernel目录下包含哪些文件?答:第二章 内存寻址1、在80x86的寄存器中,哪些寄存器供一般用户使

3、用?哪些寄存器只能被操作系统使用?答:通用寄存器EAX,EBX,ECX,EDX,EBP(基址指针),ESP(堆栈指针),ESI(扩展源指针),EDI(扩展目的指针),还有EFLAGS(标志寄存器).专供操作系统使用的寄存器:IDTR中断描述符寄存器,GDTR全局描述符表寄存器,LDTR局部描述符表寄存器,TaskRegisters任务寄存器,DebugRegister调试寄存器,ControlRegister控制寄存器,Model-SpecificRegisters模型专用寄存器。2、在保护模式下,MMU如何把一个虚地址转换为物理地址?答:分段机制把一个虚拟地址转换为线性地址;接着,分页机制把

4、一个线性地址转换为物理地址。3、请用C语言描述段描述符表。答:#include #include #define BASE_H 0xff00#define BASE_M 0x00ff#define BASE_L 0xffff#define LIMIT_H 0x000f#define LIMIT_L 0xffff#define GRANULARITY 0x0080#define SEGMENT_P 0x8000#define SYSTEM_TYPE 0x1000#define DPL 0x6000#define TYPE_E 0x0800#define TYPE_ED_C 0x0400#defi

5、ne TYPE_RW 0x0200#define TYPE_A 0x0100struct unsigned char base_high;unsigned char g : 1;unsigned char other : 3;unsigned char limit_high : 4;unsigned char P : 1;unsigned char dpl : 2;unsigned char S : 1;unsigned char E : 1;unsigned char ED_C : 1;unsigned char RW : 1;unsigned char A : 1;unsigned cha

6、r base_middle;unsigned short base_low;unsigned short limit_low; gdt_t;int main(int argc, char *argv)/ int gdt4 = 0x0fff, 0x0000, 0x9a00, 0x00c0 ; / 0x08/ int gdt4 = 0x7fff, 0x0000, 0x9a01, 0x00c0 ; / 0x10/ int gdt4 = 0x0002, 0x8000, 0x920b, 0x00c0 ; / display memory/ int gdt4 = 0xffff, 0xffff, 0xfff

7、f, 0xffff ; / test int gdt4 = 0x03ff, 0x0000, 0xf201, 0x00c0 ; / ldt0unsigned int base, limit;unsigned int granularity;unsigned int present, dpl, system_type, segment_type;unsigned int type_e, type_ed_c, type_rw, type_a;base = (gdt3 & BASE_H) 16;base += (gdt2 & BASE_M) 16;base += gdt1 & BASE_L 0;lim

8、it = (gdt0 & LIMIT_L) 0;limit += (gdt3 & LIMIT_H) 7;present = (gdt2 & SEGMENT_P) 15;dpl = (gdt2 & DPL) 13;system_type = (gdt2 & SYSTEM_TYPE) 12;type_e = (gdt2 & TYPE_E) 11;type_ed_c = (gdt2 & TYPE_ED_C) 10;type_rw = (gdt2 & TYPE_RW) 9;type_a = (gdt2 & TYPE_A) 8;printf(basett0x%xt%dn, base, base);pri

9、ntf(limittt0x%xt%dn, limit, limit);printf(n);printf(Gtt%dt(0=bype, 1=4KB)n, granularity);printf(n);printf(Ptt%dn, present);printf(DPLtt%dn, dpl);printf(Stt%dt(0=system, 1=code or data)n, system_type);printf(TYPE_Ett%xn, type_e);printf(TYPE_ED_Ct%xn, type_ed_c);printf(TYPE_RWtt%xn, type_rw);printf(TY

10、PE_Att%xn, type_a);printf(n);printf(E=0, data segmentn);printf(ED=0, data segmentn);printf(ED=1, stack segmentn);printf(W=0, not writablen);printf(W=1, writablen);printf(n);printf(E=1, code segmentn);printf(C=0, ingore privilegen);printf(C=1, use privilegen);printf(R=0, not readablen);printf(R=1, re

11、adablen);return EXIT_SUCCESS;4、Linux是如何利用段机制又巧妙的绕过段机制的?在内核代码中如何表示各种段,查找最新源代码并进行阅读和分析。答:IA32规定段机制是不可禁止的,因此不可能绕过它直接给出线性地址空间的地址。万般无奈之下,Linux的设计人员干脆让段的基地址为0,而段的界限为4GB,这时任意给出一个偏移量,则等式为“0+偏移量=线性地址”,也就是说“偏移量线性地址”。另外由于段机制规定“偏移量 %sn,p-pid,p-comm); printk(the number of process is:%dn,count); return 0;7、什么是写时复

12、制技术,这种技术在什么情况下最能发挥其优势?答:父进程和子进程共享页面而不是复制页面。然而,只要页面被共享,它们就不能被修改。无论父进程和子进程何时试图写一个共享的页面,就产生一个错误,这时内核就把这个页复制到一个新的页面中并标记为可写。原来的页面仍然是写保护的:当其它进程试图写入时,内核检查写进程是否是这个页面的唯一属主;如果是,它把这个页面标记为对这个进程是可写的。采用这种技术,显然只有预测到将要修改的页才会被复制,而且必须被复制,不然的话,就会破坏父进程的程序执行。9、init内核线程与init进程是一回事吗?它们有什么本质的区别?答:(1)init()函数是内核代码的一部分,在内核态运

13、行,是独立的可执行代码的一部分。(2)init进程在Linux操作系统中是一个具有特殊意义的进程,它是由内核启动并运行的第一个用户进程,因此它不是运行在内核态,而是运行在用户态。它的代码不是内核本身的一部分,而是存放在硬盘上可执行文件的映象中,和其他用户进程没有什么两样。10、用fork写一个简单的测试程序,从父进程和子进程中打印信息。信息应该包括父进程和子进程的PID。执行程序若干次,看两个信息是否以同样的次序打印。答:#includeint main(void) pid_t pid; pid = fork(); if(pid 0) printf(error); return 0; else

14、 if(pid = 0) printf(this is chile process with pid of %dn,getpid(); else printf(this is parent process with pid of %dn,pid); return 0;第四章 内存管理1、内核空间存放什么内容?如何把其中的一个虚地址转换成物理地址?答:内核空间存放的是内核代码和数据。2、什么是内核映像?它存放在物理空间和内核空间的什么地方?答:内核空间由所有进程共享,其中存放的是内核代码和数据,即“内核映象”Linux内核映像被装入在物理地址0x00100000开始的地方内核映像在内核空间的起始

15、地址就为0xC0100000。3、用户空间划分为哪几部分?用户程序调用malloc()分配的内存属于那一部分?答:分为堆栈段、BSS(未初始化的数据段)、数据段和代码段。从数据段的顶部到堆栈段地址的下沿这个区间是一个巨大的空洞,这就是进程在运行时调用malloc()可以动态分配的空间,也叫动态内存或堆。4、什么是虚存映射?有哪几种类型?答:随着进程的运行,被引用的程序部分会由操作系统装入到物理内存,这种将映像链接到进程用户空间的方法被称为“虚存映射”,也就是把文件从磁盘映射到进程的用户空间,这样把对文件的访问转化为对虚存区的访问。有两种类型的虚存映射:(1)共享的:有几个进程共享这一映射,也就

16、是说,如果一个进程对共享的虚存区进行写,其它进程都能感觉到,而且会修改磁盘上对应的文件。(2)私有的:进程创建的这种映射只是为了读文件,而不是写文件,因此,对虚存区的写操作不会修改磁盘上的文件,由此可以看出,私有映射的效率要比共享映射的高。 除了这两种映射外,如果映射与文件无关,就叫匿名映射。5、一个进程一般包含哪些虚存区?举例说明。6、说明mmap()系统调用的功能?利用mmap()写一个拷贝文件的程序。答:mmap()系统调用时通过调用do_mmap内核函数来实现建立文件到显存的映射。int i,fd1,fd2;char *buf1,buf2;fd1 = open(data,0 KDOMC

17、Y);if(fd1&fd2&(fstar(fd);&star buf1()=0) if(lseek(fd) statbuf,st_size-1,seek_set)0 perrorlseek target); exit(-1); if(MAP_FAILED = buf() perror(Lmap source); exit(-1); if(map_FAFCE) = buf2) perror(mmap target); exit(-1); mempy(buf2,buf1,(size - f)startbuf,st_size);7、Linux是如何实现“请求调页”的?答:1)如果被访问的页不在内存,

18、也就是说,这个页还没有被存放在任何一个物理页面中,那么,内核分配一个新的页面并将其适当地初始化,这种技术称为“请求调页”;2)“请求调页”是一种动态内存分配技术,它将页面的分配推迟到不能再推迟为止,也就是说,一直推迟到进程要访问的页不在物理内存时为止,由此引起一个缺页异常;该技术的引入主要是因为进程开始运行时并不访问其地址空间中的全部地址。8、试叙述伙伴算法的工作原理,并说明为什么伙伴算法可以消除外碎片?答:假设要求分配的块其大小为128个页面。该算法先在块大小为128个页面的链表中查找,看是否有这样一个空闲块。如果有,就直接分配;如果没有,该算法会查找下一个更大的块,具体地说,就是在块大小为

19、256个页面的链表中查找一个空闲块。如果存在这样的空闲块,内核就把这256个页面分为两等份,一份分配出去,另一份插入到块大小为128个页面的链表中。如果在块大小为256个页面的链表中也没有找到空闲页块,就继续找更大的块,即512个页面的块。如果存在这样的块,内核就从512个页面的块中分出128个页面满足请求,然后从384个页面中取出256个页面插入到块大小为256个页面的链表中。然后把剩余的128个页面插入到块大小为128个页面的链表中。如果512个页面的链表中还没有空闲块,该算法就放弃分配,并发出出错信号。9、vmalloc()和kmalloc()有何区别?编写内核模块程序,调用这两个函数以

20、观察二者所分配空间位于不同的区域。答:在内核空间中调用kmalloc()分配连续物理空间,而调用vmalloc()分配非物理连续空间。我们把kmalloc()所分配内核空间中的地址称为内核逻辑地址 把vmalloc()分配的内核空间中的地址称为内核虚拟地址 vmalloc()在分配过程中须更新内核页表 #include#include#include#include#includeunsigned char * kmalloc men;unsigned char * vmalloc men;MODULL_LICENSE(GPL);static int_init init_mmshow(void

21、) pagemem = _get_free_page(GFP_KERNEL); if(!kmallocmen) goto fail2; printk(KERN_INFOvmallocmen = 0x%pn,vmallocmen); return 0; failB fail 1: Kfree(kmallocmen); fail 2: free_page(pagemon); fail 3: return -1;static void_exit cleanup_mmshow(void) Vfree(vmallocmen); Kfree(kmallocmen); free_page(pagemen);

22、module_init(imit_mmshow);module_exit(cleanup_mmshow);10、分析守护进程kswapd的运行时机,你认为怎样换出页面比较合理?答:为了避免在CPU忙碌的时候,也就是在缺页异常发生时,临时搜索可供换出的内存页面并加以换出,Linux内核定期地检查系统内的空闲页面数是否小于预定义的极限,一旦发现空闲页面数太少,就预先将若干页面换出,以减轻缺页异常发生时系统所承受的负担。当然,由于无法确切地预测页面的使用,即使这样做了也还可能出现缺页异常发生时内存依然没有足够的空闲页面。但是,预换出毕竟能减少空闲页面不够用的概率。并且通过选择适当的参数(如每隔多久换出一次,每次换出多少页),可以使临时寻找要换出页面的情况很少发生。为此,Linux内核设置了一个定期将页面换出的守护进程kswapd。第五章 中断和异常1、什么是中

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1