下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、0.12 内核有如下几下目录:Boot, Fs, Include ,Mm, Init, Kernel, Lib, Tools,最外层有一个总的 MakeFile.各目录文件分布情况如下:Boot: bootsect.S setup.S head.s其中后缀.S大写表明:as使用GNU C编译器的预处理功能引导启动程序bootsect.S将setup.S代码和system模块加载到内存中,并且分别把自己 和setup.S代码移动到物理内存 0x90000和0x90200处,就把执行权交给了setup程序。其中system模块的首部包含 head.s代码。Setup程序的主要作用是利用ROM BI
2、OS的中断程序获取机器的一些基本参数,并保存在0x90000开始的内存块中,供后面程序使用。同时把 system模块往下移动到物理地址 0x00000开始处,这样,system中的head.s代码就处在0x00000开始处了。然后加载描述符 表基地址到描述符表寄存器中,为进行 32位保护模式下的运行作好准备。接下来对中断控 制硬件进行重新设置,最后通过设置机器控制寄存器CR0并跳转到system模块的head.s代码开始处,使C P U进入32位保护模式下运行。Head.s代码主要作用是初步初始化中断描述符表中的2 5 6项门描述符,检查A 2 0地址线是否已经打开, 测试系统是否含有数学协处
3、理器。 然后初始化内存页目录表, 为内存的 分页管理作好准备工作。最后跳转到 system模块中的初始化程序init/main.c中继续执行。Init:main.cMain.c利用setup.s取得的系统参数设置系统的根文件设备号以及一些内存全局变量。然后内核进行硬件的初始化工作。包括陷阱门,块设备,字符设备,tty,包括人工设置第一个任务task0.然后设置中断允许标志开中断,main切换到任务。中运行。Tools:build.cBuild.c生成内核磁盘映像文件,单独编绎成可执行文件,在 linux/目录下的M akefile文 件中被调用运行,用于将所有内核编译代码链接和合并成一个可运行
4、内核映像文件Image.Mm:Swap.c Page.s Memory.c Makefilepage.s包含页异常的中断处理过程(int 14),主要实现了对缺页和页写保护的处理。Memory.c是内存页面管理的核心文件,用于内存的初始化操作,页目录和页表的管理和 内核其他部分对内存申请的处理过程。Swap.c是内存页面交换管理文件,其中主要包括映射位图管理函数和交换设备访问函数。Lib:write.c wait.c string.c setsid.c open.c malloc.c _exit.c execve.c errno.c dup.c ctype.c close.c_exit.c:程
5、序调用内核的系统调用函数。_asm("int 0x80":"a"(NR_exit),"b"(exit_code);Close.c:定义了文件关闭函数。_syscall1(int,close,int ,fd)Ctype.c:为ctype.h提供辅助数据结构数据,用于对字符进行类型判断。Dup.c:复制文件描述符函数。_syscall1(int,dup,int ,fd)Errno.c:仅定义了一个出错号变量errno.Execve.c:运 行执行 程序的 系统调用函数。_syscall3(int ,execve,const char*,f
6、ile,char *,argv,char*, envp)Malloc.c:内存分配函数。Open.c:Open系统调用可将一个文件名转换成一个文件描述符。Setsid.c:setsid()系统调用函数。_syscall0(pid_t,setsid)String.c:所有字符串操作函数存在于string.h中。Wait.c:包含函数 waitpid()和wait().wait()系统调用直接调用 waitpid()函数。Write.c:write()函数向文件描述符指定的文件写入count字节的数据到缓冲区buf中。_syscall3(int,write,int ,fd,const char*,
7、buf,off_t,count)FS:Truncate.c bitmap.c inode.c super.c buffer.c pipe.c stat.c open.c namei.c ioctl.c file_table.c file_dev.c fcntl.c exec.c block_dev.c char_dev.c read_write.c select.c 其中file_table.c是空的。高速缓冲区:Buffer.c :内核实现高速缓冲区的程序是buffer.c。文件系统中其他程序通过指定需要访问的设备号和数据逻辑块号来调用它的块读写函数。这些接口函数有:块读取函数bread()
8、,块提前预读函数breada()和页块读取函数 bread_page().文件系统底层函数:Bitmap.c程序包含对i节点位图和逻辑块节点位图进行释放和占用处理函数。操彳i节点位图的函数是free_inode()和new_inode(),操作逻辑块位图的函数是 free_block()和new_block().Truncate.c程序包括对数据文件长度截断为0的函数truncate。.它将i节点指定的设备上文件长度截为0.并释放文件数据占用的设备逻辑块。Inode.c程序包括分配i节点函数iget()和放回对内存i节点存取函数iput()以及根据i节点信 息取文件数据块在设备上对应的逻辑块号
9、函数bmap();Namei.c程序主要包括函数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
10、.c中的read()和write()系统调用。通过对被操作文件属性的判断,这两个系统调用会分别调用这些文件中的相关处理函数进行操作。Block_dev.c中的函数block_read() block_write()是用于读写块设备特殊文件中的数据。所使 用的参数指定了要访问的设备号,读写的起始位置和长度。File_dev.c中file_read(),file_write()通过指定文件对应的i节点和文件结构,可以知道文件所 在的设备号和文件当前读写指针。Pipe.c实现管道读写函数read_pipe() write_pipe().另外还实现了创建无名管道的系统调用pipe().Char_dev
11、.c:系统调用 read() ,write()通过调用 rw_char()实现Read_write.c:实现了系统调用 read(),write(),lseek().文件和目录管理系统调用:文件系统调用上层实现:exec.c fcntl.c open.c ioctl.c stat.cOpen.c实现与文件操作相关系统调用。主要有文件的创建,打开和关闭。文件宿主和属性 的修改,文件访问权限的修改,文件操作时间的修改和系统文件系统root的变动等。Exec.c实现对二进制可执行文件和shell脚本文件的加载与执行。主要函数do_execve()是系统中断调用(int0x80)功能号_NR_exec
12、ve()调用的C处理函数,也是 exec()函数簇的主要 实现函数。Fcntl.c实现文件控制系统调用 fcntl()和两个文件句柄复制系统调用dup()和dup2().dup2()指定了新句柄的数值,dup()返回当前值最小的未用句柄。Ioctl.c文件实现了输入输出控制系统调用ioctl().主要调用tty_ioctl()函数对终端IO进行控制。Stat.c实现取文件状态信息系统调用stat()和fstat().stat()利用文件名取信息fstat()利用文件句柄取信息。(文件句柄即文件描述符) 其他:select.c实现select系统调用。Kernel:Blk_drv Chr_drv
13、 Math Asm.s exit.c fork.c mktime.c panic.c printk.c sched.c signal.c sys.c sys_call.s traps.c vsprintf.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.c tty_ioctl.cMath 子目录: add.c compare.c convert.c div.c ea.c error.c get_put.c
14、 mul.c math_emulate.c中断处理程序:包括 asm.s和traps.c文件Asm.s用于实现大部分硬件异常所引起的中断的汇编语言处理过程。Traps.c实现asm.s的中断处理过程中调用的 C函数。系统调用处理相关程序:sys_call.s fork.c signal.c sys.c exit.cSys_call.s主要实现系统调用中断int0x80的入口处理过程以及信号检测处理,同时给出了sys_execve(),sys_fork()这两个系统调用的底层接口,还给出了协处理器出错,设备不存在, 时钟中断,硬盘中断,软盘中断的中断处理程序。Signal.c涉及内核中信号处理函
15、数。包括设置和获取信号阻塞码,信号处理系统调用,可靠 信号处理系统调用等。Exit.c描述进程终止和退出的有关事宜。主要包括进程释放,会话终止和程序退出以及杀死 进程,终止进程,挂起进程等系统调用函数。还包括进程信号发送函数send_sig()和通知父进程子进程中止的函数tell_father()Fork.c:该程序是sys_fork()系统调用的辅助处理函数集,给出了 sys_fork()中使用的 find_empty_process ()和copy_process ()函数。还包括内存区域验证 verify_area()和内存分配 copy_mem()函数。Sys.c:包含很多系统调用功能
16、实现函数。其他通用类程序:schedule.c mktime.c panic.c printk.c vsprintf.cSchedule.c包含内核调用最频繁的 schedule(),sleep_on(),wakeup()函数,是内核的核心调度程 序,用于对进程的执行进行切换或改变进程执行状态。另外还包括有关系统时钟中断和软盘驱动器定时的函数。Mktime.c:包含内核使用白时间函数 mktime(),仅在init/main.c中使用一次Panic.c:panic()函数用于在内核运行出现错误时显示出错信息并停机。Printk.c以及vsprintf.c是内核显示信息的支持程序,实现了内核专用
17、显示函数printf()和字符串格式化输出函数vsprintf().块设备驱动程序:blk.h:定义请求等待队列中项的数据结构request,用宏语句定义了电梯搜索算法。Hd.c:提供对硬盘的读写驱动和初始化处理。包含以下函数:1,初始化硬盘和设置硬盘所用数据结构的sys_setup(),hd_init()2,向硬盘控制器发送命令:hd_out()3,处理硬盘当前请求项do_hd_request()4 .硬盘中断处理过程中调用的C 函数 read_intr(), write_intr(), bad_rw_intr(), recal_intr().5 .硬盘控制器操作辅助函数 controler
18、_ready(), driive_busy(), win_result(),hd_out(), reset_controler()等。Ll_rw_blk.c:执行低层块设备读写操作,是块设备与系统其他部分的接口程序,其他程序通 过调用ll_rw_block()来读写块设备中的数据。该函数的主要功能是创建块设备读写请求项, 并插入到指定块设备请求队列中。实际的读写操作则是由设备的请求项处理函数request_fn()完成。硬盘 do_hd_request(),软盘 do_fd_request()虚拟盘 do_rd_request()Ramdisk.c:rd_init() 在init/main.c
19、 调用,用于确定虚拟盘在内存中的位置和大小。Do_rd_request()是虚拟盘设备的请求项操作函数。Rd_load()是虚拟盘根文件加载函数。Floppy.c:软盘驱动程序,do_fd_request()函数字符设备驱动程序:包括控制终端设备和串行终端设备。控制台驱动程序:Keybord.s:键盘中断处理程序。Console.c:实现终端屏幕写函数con_write()以及进行终端屏幕显示的控制操作。串行线路驱动程序:Serial.c:实现系统串行端口初始化。Rs_init()中设置默认串行通信参数,设置串行端口的中断向量。Rw_write()把串行终端设备写缓疝队列中的字符通过串行线路发
20、送给远端的终端设 备。Rs_io.s:串行通信中断处理过程,对终端的读写缓冲队列进行操作。把从串行线路接收到的 字符存入串行终端读缓冲队列read_q中,或把写缓冲队列write_q中需要发送出去的字符通过串行线路发送给串行终端设备。终端驱动程序与上层接口部分:tty_io.c:含有终端读写函数 tty_read(),tty_write(),读操作的行规则函数 copy_to_cooked().Tty_ioctl.c:实现函数tty_ioctl.c可修改指定终端termios结构中的设置标志等信息。数学协处理器:Math_emulate.c:设备不存在异常处理函数程序接口math_emulat
21、e(),浮点指令仿真处理主函数do_emu(),别外函数为仿真运算辅助类函数。Error.c:用于处理协处理器发出的出错信号,执行 math_error()函数。Ea.c:用于在仿真浮点指令时计算其中操作数使用到的有效地址。Convert.c:包含80387仿真操作过程中的数据类型转换函数。Add.c:处理仿真过程中的加法运算。Compare.c:用于在仿真过程中比较累加器中两个临时数的大小。Get_put.c:处理所有对用户内存的访问,取得和存入指令,实数值,BCD数值等。Mul.c:仿真80387的乘法运算。Div.c:仿真80387协处理器的除法运算。Include:Asm Linux
22、Sys a.out.h const.h ctype.h errno.h fcntl.h signal.h stdarg.h stddef.h string.h Termios.h time.h unistd.h utime.hASM 子目录:io.h memory.h segment.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.h Sys 子目录: param.h resource.h stat.h time.h times.h types
23、.h utsname.h wait.hA.out.h:文件用于定义被加载的可执行文件的结构,主要用于加载程序fs/exec.c中。Const.h:定义了 I节点中文件属性和类型i_mode字段所用到的一些标志位常量符号。Ctype.h:关于字符测试和处理的头文件,定义了一些字符类型判断和处理的宏。Errno.h:定义出错号的常量符号Fcntl.h:文件控制选项头文件,定义文件控制函数fcntl()和文件创建和打开函数中乃至的一些 选项。Signal.h:定义内核中使用的所有信号的名称和基本操作函数。Signal() signaction()Stdarg.h:标准参数头文件,它以宏的形式定义变量
24、参数列表。主要说明了一个类型va_list和三个宏 va_start,va_arg,va_end,用于 vsprintf,vprintf,vfprintf 函数。 Stddef.h:主要用于存放一些标准定义。String.h:文件以内嵌函数的形式定义了所有字符串操作函数,使用了汇编程序。Termios.h:终端接口定义,含有 termios结构和通用终端端口设置函数原型。Time.h:涉及处理时间和日期的函数。Unistd.h:标准符号常数和类型头文件,该文件中定义了很多各种各样的常数和类型,以及一 些函数声明。如果程序中定义了符号_LIBRARY_,则还包括内核系统调用号和内嵌汇编_sysc
25、all0()等。Utime.h:该文件定义了文件访问和修改时间的结构utimebuf以及utime()函数原型。ASM 子目录:io.h memory.h segment.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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年焦作客运从业资格证考试模板
- 吉林师范大学《中国新闻传播史》2021-2022学年第一学期期末试卷
- 吉林师范大学《国际法》2021-2022学年第一学期期末试卷
- 酒吧合伙人股份转让合同
- 智能制造中焊锡废气控制方案
- 科研单位学术道德建设制度
- 2024简单版商铺租赁合同范本
- 学校防震应急预案培训方案
- 轨道交通设备供货实施方案
- 养老机构消防安全隐患整改方案
- 糖尿病与糖尿病并发症
- 小学校情学情分析
- 项目、项目群和项目组合管理 项目管理指南
- (正式版)JTT 1482-2023 道路运输安全监督检查规范
- 人工智能算力中心平台建设及运营项目可行性研究报告
- MOOC 综合英语-中南大学 中国大学慕课答案
- 2024年山东省潍坊市高三二模语文高分范文2篇:简单并不简单
- 幼儿园主题网络图
- MOOC 人像摄影-中国传媒大学 中国大学慕课答案
- 《印学话西泠》参考课件
- MOOC 计算机组成原理-电子科技大学 中国大学慕课答案
评论
0/150
提交评论