内核组织架构_第1页
内核组织架构_第2页
内核组织架构_第3页
内核组织架构_第4页
内核组织架构_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Kernel, Lib,0.12 内核有如下几下目录:Boot, Fs,In elude ,Mm, I nit,Tools,最外层有一个总的 MakeFile.各目录文件分布情况如下:Boot: bootsect.S setup.S head.s 其中后缀.S 大写表明:as 使用GNUC编译 器的预处理功能引导启动程序bootsect.S将setup.S代码和system模块加载到内存中,并且 分别把自己和setup.S代码移动到物理内存 0x90000和0x90200处,就把执行权交 给了 setup程序。其中system模块的首部包含head.s代码。Setup程序的主要作用是利用ROM

2、 BIOS的中断程序获取机器的一些基本参数,并保存在0x90000幵始的内存块中,供后面程序使用。同时把 system模块往下移 动到物理地址0x00000幵始处,这样,system中的head.s代码就处在0x00000幵 始处了。然后加载描述符表基地址到描述符表寄存器中,为进行32位保护模式下的运行作好准备。接下来对中断控制硬件进行重新设置,最后通过设置机器控制寄 存器CR0并跳转到 system模块的head.s代码幵始处,使CPU进入32位保护模式下运行。Head.s代码主要作用是初步初始化中断描述符表中的2 5 6项门描述符,检查A2 0地址线是否已经打幵,测试系统是否含有数学协处理

3、器。然后初始化内存页目录表,为内存的分页管理作好准备工作。最后跳转到system模块中的初始化程序init/main.c 中继续执行。In it:mai n.cMain.c利用setup.s取得的系统参数设置系统的根文件设备号以及一些内存 全局变量。然后内核进行硬件的初始化工作。包括陷阱门,块设备,字符设备,tty,包括人工设置第一个任务taskO.然后设置中断允许标志幵中断,main切换到任务0中 运行。Tools:build.cBuild.c生成内核磁盘映像文件,单独编绎成可执行文件,在lin ux/目录下的M akefile 文件中被调用运行,用于将所有内核编译代码链接和合并成一个可运行

4、 内核映像文件Image.Mm:Swap.c Page.s Memory.c Makefilepage.s包含页异常的中断处理过程(int 14),主要实现了对缺页和页写保护的 处理。Memory.c是内存页面管理的核心文件,用于内存的初始化操作,页目录和页表的管理和内核其他部分对内存申请的处理过程。Swap.c是内存页面交换管理文件,其中主要包括映射位图管理函数和交换设备访 问函数。Lib:write.cwait.c stri ng.csetsid.cope n.c malloc.c_exit.cexecve.cerrno.c dup.c ctype.c close.c_exit.c:程序调

5、用内核的系统调用函数。_asm(i nt0x80:a(NR_exit),b(exit_code);Close.c:疋义了文件关闭函数。_syscall1(i nt,close,i nt ,fd)Ctype.c:为ctype.h提供辅助数据结构数据,用于对字符进行类型判断Dup.c:复制文件描述符函数。_syscall1(int,dup,int ,fd)Errn o.c: 仅定义了一个出错号变量errno.Execve.c: 运行执行程序的系统调用函数。_syscall3(i nt,execve,co nst char*,file,char *,argv,char*, envp)Malloc.c

6、:内存分配函数。Open.c:Open系统调用可将一个文件名转换成一个文件描述符。Setsid.c:setsid()系统调用函数。_syscallO(pid_t,setsid)Str in g.c:所有字符串操作函数存在于str in g.h中。Wait.c:包含函数waitpid() 和wait().wait()系统调用直接调用 waitpid() 函数。Write.c:write()函数向文件描述符指定的文件写入count字节的数据到缓冲区buf 中。_syscall3(i nt,write,i nt ,fd,c onst char*,buf,off_t,co unt)FS:Tr un c

7、ate.c bitmap.c ino de.c super.c buffer.c pipe.c stat.c ope n.c n amei.c ioctl.c file_table.c file_dev.cfen tl.cexec.c block_dev.cchar_dev.c read_write.c select.c其中file_table.c是空的。高速缓冲区:Buffer.c :内核实现高速缓冲区的程序是buffer.c 。文件系统中其他程序通过指定需要访问的设备号和数据逻辑块号来调用它的块读写函数。这些接口函数有:块读取函数bread(),块提前预读函数 breada()和页块读取函

8、数 bread_page().文件系统底层函数:Bitmap.c程序包含对i节点位图和逻辑块节点位图进行释放和占用处理函数。操作i节点位图的函数是freenode()和new_inode(),操作逻辑块位图的函数是free_block()和 new_block().Truncate.c程序包括对数据文件长度截断为0的函数truncate().它将i节点指定的设备上文件长度截为0.并释放文件数据占用的设备逻辑块。Inode.c程序包括分配i节点函数iget()和放回对内存i节点存取函数iput()以及 根据i节点信息取文件数据块在设备上对应的逻辑块号函数bmap();Namei.c程序主要包括函

9、数 namei().使用iget(),iput(),bmap()将给定的文件路径名映射到其i节点。Super.c 程序专门用于处理文件系统超级块,包括函数 get_super(),put_super(),free_super().还包括几个文件系统加载、卸载处理函数和系统调用。文件中数据的访问操作:文件数据的访问操作涉及block_dev.c ,file_dev.c,char_dev.c,pipe.c和read_write.c.前面4个文件可以认为是块设备,字符设备,管道设备和普通文件与文件读写系统调用的接口程序,它们共同实现了read_write.c 中的read()和write()系统调用

10、。通过对被操作文件属性的判断,这两个系统调用会分别调用这 些文件中的相关处理函数进行操作。Block_dev.c 中的函数block_read() block_write()是用于读写块设备特殊文件中的数据。所使用的参数指定了要访问的设备号,读写的起始位置和长度。File_dev.c 中file_read(),file_write()通过指定文件对应的i节点和文件结构,可以知道文件所在的设备号和文件当前读写指针。Pipe.c实现管道读写函数read_pipe() write_pipe().另外还实现了创建无名管道的系统调用pipe().Char_dev.c:系统调用 read() ,write

11、() 通过调用 rw_char()实现Read_write.c:实现了系统调用 read(),write(),lseek().文件和目录管理系统调用:Open.c实现与文件操作相关系统调用。 主要有文件的创建,打幵和关闭。文件宿主 和属性的修改,文件访问权限的修改,文件操作时间的修改和系统文件系统root的变动等。Exec.c实现对二进制可执行文件和shell脚本文件的加载与执行。主要函数do_execve()是系统中断调用(int0x80)功能号_NR_execve()调用的C处理函数,也是exec()函数簇的主要实现函数。Fentl.c实现文件控制系统调用fentl()和两个文件句柄复制系

12、统调用dup()和dup2().dup2()指定了新句柄的数值,dup()返回当前值最小的未用句柄。loctl.c文件实现了输入输出控制系统调用ioctl().主要调用tty_ioctl() 函数对终端IO进行控制。Stat.c实现取文件状态信息系统调用stat()和fstat().stat()利用文件名取信息fstat()利用文件句柄取信息。(文件句柄即文件描述符)其他:select.c 实现select系统调用。Kern el:Blk_drv Chr_drv Math Asm.s exit.c fork.c mktime.c pani c.c pri ntk.csched.c sig na

13、l.c sys.c sys_call.s traps.c vspri ntf.c其中 Blk_drv 子目录: blk.h floppy.c hd.c ramdisk.c ll_rw_blk.cChr_drv 子目录: console.c keybord.s pty.c rs_io.c serial.c tty_io.ctty_ioctl.cMath 子目录:add.c compare.c convert.c div.c ea.c error.c get_put.c mul.c math_emulate.c中断处理程序:包括 asm.s和traps.c文件Asm.s用于实现大部分硬件异常所引起

14、的中断的汇编语言处理过程。系统调用处理相关程序:sys_call.s fork.c sig nal.c sys.c exit.cSys_call.s 主要实现系统调用中断in t0x80的入口处理过程以及信号检测处理,同时给出了 sys_execve(),sys_fork()这两个系统调用的底层接口,还给出了协处理器出错,设备不存在,时钟中断,硬盘中断,软盘中断的中断处理程序。Sig nal.c涉及内核中信号处理函数。包括设置和获取信号阻塞码,信号处理系统调 用,可靠信号处理系统调用等。Exit.c描述进程终止和退出的有关事宜。主要包括进程释放,会话终止和程序退出 以及杀死进程,终止进程,挂起

15、进程等系统调用函数。还包括进程信号发送函数 send_sig()和通知父进程子进程中止的函数tell_father()Fork.c:该程序是sys_fork()系统调用的辅助处理函数集, 给出了 sys_fork()中使 用的 find_empty_process ()和 copy_process () 函数。还包括内存区域验证verify_area() 和内存分配 copy_mem()函数。Sys.c:包含很多系统调用功能实现函数。其他通用类程序:schedule.c mktime.c pani c.c prin tk.c vspri ntf.cSchedule.c 包含内核调用最频繁的sc

16、hedule(),sleep_on(),wakeup()函数,是内核的核心调度程序,用于对进程的执行进行切换或改变进程执行状态。另外还包括 有关系统时钟中断和软盘驱动器定时的函数。Mktime.c:包含内核使用的时间函数mktime(),仅在init/main.c中使用一次Pani c.c:pa ni c()函数用于在内核运行出现错误时显示出错信息并停机。Printk.c以及vsprintf.c是内核显示信息的支持程序,实现了内核专用显示函数prin tf()和字符串格式化输出函数 vspri ntf().块设备驱动程序:blk.h:定义请求等待队列中项的数据结构request,用宏语句定义了

17、电梯搜索算法。Hd.c:提供对硬盘的读写驱动和初始化处理。包含以下函数:1,初始化硬盘和设置硬盘所用数据结构的sys_setup(),hd_i ni t()2, 向硬盘控制器发送命令:hd_out()3, 处理硬盘当前请求项 do_hd_request()4. 硬盘中断处理过程中调用的C函数readntr(),writentr(),bad_rw_intr(),recal_i ntr().5. 硬盘控制器操作辅助函数 controler_ready(),driive_busy(),win_result(),hd_out(), reset_c on troler()等。Ll_rw_blk.c:执行

18、低层块设备读写操作,是块设备与系统其他部分的接口程序,其他程序通过调用ll_rw_block()来读写块设备中的数据。该函数的主要功能是创建块设备读写请求项,并插入到指定块设备请求队列中。实际的读写操作则是由设备的请求项处理函数request_fn() 完成。硬盘 do_hd_request(), 软盘 do_fd_request() 虚拟盘 do_rd_request()Ramdiskcrdnit()在init/main.c调用,用于确定虚拟盘在内存中的位置和大小。Do_rd_request()是虚拟盘设备的请求项操作函数。Rd_load()是虚拟盘根文件 加载函数。Floppy.c:软盘驱

19、动程序,do_fd_request()函数字符设备驱动程序:包括控制终端设备和串行终端设备。控制台驱动程序:Keybord.s:键盘中断处理程序。Console.c:实现终端屏幕写函数con_write()以及进行终端屏幕显示的控制操作。 串行线路驱动程序:Serial.c:实现系统串行端口初始化。 Rsn it()中设置默认串行通信参数, 设置串 行端口的中断向量。Rw_write()把串行终端设备写缓冲队列中的字符通过串行线路 发送给远端的终端设备。Rs_io.s:串行通信中断处理过程, 对终端的读写缓冲队列进行操作。 把从串行线路 接收到的字符存入串行终端读缓冲队列read_q中,或把写

20、缓冲队列 write_q中需要发送出去的字符通过串行线路发送给串行终端设备。终端驱动程序与上层接口部分:tty_io.c:含有终端读写函数tty_read(),tty_write(),读操作的行规则函数copy_to_cooked().Tty_ioctl.c:实现函数tty_ioctl.c可修改指定终端termios结构中的设置标志等信息。数学协处理器:Math_emulate.c:设备不存在异常处理函数程序接口math_emulate(),浮点指令仿真处理主函数do_emu(),别外函数为仿真运算辅助类函数。Error.c:用于处理协处理器发出的出错信号,执行math_error()函数。E

21、a.c:用于在仿真浮点指令时计算其中操作数使用到的有效地址。Convert.c:包含80387仿真操作过程中的数据类型转换函数。Add.c:处理仿真过程中的加法运算。Compare.c:用于在仿真过程中比较累加器中两个临时数的大小。Get_put.c:处理所有对用户内存的访问,取得和存入指令,实数值,BCD数值等。Mul.c:仿真80387的乘法运算。Div.c:仿真80387协处理器的除法运算。In clude:Asm Linux Sys a.out.h con st.h ctype.h errno.h fen tl.h sig nal.h stdarg.h stddef.h stri ng

22、.hTermios.h time.h un istd.h utime.hASM子 目录:io.h memory.h segme nt.h system.hLinux 子目录: config.h fdreg.h fs.h hdreg.h head.h kernel.h math_emu.h mm.h sched.h sys.h tty.hSys 子目录: param.h resource.h stat.h time.h times.h types.h utsname.hwait.hA.out.h:文件用于定义被加载的可执行文件的结构,主要用于加载程序fs/exec.c中。Const.h :定义了

23、 I节点中文件属性和类型i_mode字段所用到的一些标志位常量符号。Ctype.h:关于字符测试和处理的头文件,定义了一些字符类型判断和处理的宏。Errno.h:定义出错号的常量符号Fen tl.h:文件控制选项头文件,定义文件控制函数fen tl()和文件创建和打幵函数中乃至的一些选项。Sign al.h:定义内核中使用的所有信号的名称和基本操作函数。Sig nal()sig nacti on()Stdarg.h:标准参数头文件,它以宏的形式定义变量参数列表。主要说明了一个类 型 va_list 和三个宏 va_start,va_arg,va_end ,用于 vsprintf,vprintf

24、,vfprintf 函数。Stddef.h主要用于存放一些标准定义。Stri ng.h:文件以内嵌函数的形式定义了所有字符串操作函数,使用了汇编程序。Termios.h:终端接口定义,含有termios结构和通用终端端口设置函数原型Time.h:涉及处理时间和日期的函数Uni std.h:标准符号常数和类型头文件,该文件中定义了很多各种各样的常数和类型,以及一些函数声明。如果程序中定义了符号_LIBRARY_则还包括内核系统调用 号和内嵌汇编_syscallO() 等。Utime.h:该文件定义了文件访问和修改时间的结构 utimebuf以及utime()函数原 型。ASM子 目录:io.h memory.h segme nt.h system.hIo.h:定义了对硬件端口访问的嵌入式汇编函数:outb(),inb(),outb_p(),inb_p()Memory.h:含有内存复制嵌入式汇编宏memcpy(),与string.h中memcpy()相同。Segment.h:定义了访问段寄存器或与段寄存器有关的内存操作函数。System.h:定义了设置和修改描述符/中断门等的嵌入式汇编宏。Linux 子目录: config.h fdreg.h fs.h hdreg.h head.h kernel.h math_emu.h mm.h sched.h sys.h

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论