Linux0.11main函数启动初始化(二)
在Linux0.11的初始化过程中,main函数起到关键的启动作用。首先,sti指令被调用,这表示中断功能的开启,模块初始化工作至此完成。接着,move_to_user_mode()函数被执行,这标志着程序从内核模式切换至用户模式,即执行任务0,并通过iret指令实现切换。iret指令前,数据被压入堆栈,执行后,数据根据标志...
linux0.11源码分析-fork进程
在操作系统中,Linux0.11源码中的fork函数执行流程分为启动和系统调用两个阶段。启动阶段首先在init\/main.c中执行init用于启动shell,让用户执行命令。在include\/unistd.h中定义了宏,表示将__NR_fork的值复制给eax寄存器,并将_res与eax绑定。使用int 0x80中断后,系统调用函数system_call被调用,从sys...
linux0.11版本中,关于函数do_timer的疑问
next_timer = next_timer->next;(fn)();...} 这个函数中的函数指针是在函数void add_timer(long jiffies, void (*fn)(void))中添加的。这个函数是供内核使用的,用户空间的函数是不能调用add_timer的,也就是说 do_timer (long cpl)函数中的函数指针只会指向内核里面的函数。(我去看了lin...
通过do_execve源码分析程序的执行(上)(基于linux0.11)
本文仅探讨编译后的二进制文件。解析流程如下:首先验证文件可执行性和当前进程权限,通过后,仅加载头部数据,具体代码在真正运行时通过缺页中断加载。然后,申请物理内存并存储环境变量和参数,该步骤在copy_string函数中实现。
linux系统调用之write源码解析(基于linux0.11)
Linux系统的write函数在底层操作上与read函数有相似之处。本文主要关注一般文件的写操作,我们首先从入口函数开始解析。进入file_write函数,它的核心逻辑是根据文件inode中的信息,确定要写入的硬盘位置,即块号。如果目标块已存在,就直接返回块号;若不存在,则需要创建新的块。这个过程涉及到bmap函数,它...
linux内核0.11 获取第一个空闲物理内存页的函数 get_free_page函数 问题...
1、std:方向位DF置位,即DI进行自减操作。2、repne; scasb 这两条组合指令实现循环比较。ecx初值为15*1024,al=0,di初值为&mem_map[15*1024-1],即从数组mem_map的最后一项开始,依次与al(=0)进行比较。假设数组第i项mem_map[i]==0,则结束循环,此时ecx=i, edi=&mem_map[i-1](...
什么是根文件系统
在0.11内核代码中,从mount_root(void)中的注释可知,该函数会被“系统调用函数”sys_setup()调用,而在系统开机初始化设置时函数sys_setup()会被调用。为什么不会调用sys_mount()呢?那我们又何时使用sys_mount()函数呢?其实 sys_mount()函数也是“系统调用函数”。我们在linux系统中,当你在某个shell的命令行中输...
在linux0.11中谁能 告诉我RAMDISK哪来的
mkdir \/tmp\/ramdisk0 create a filesystem:mke2fs \/dev\/ram0 # or :mkfs -t ext2 \/dev\/ram0 mount the ramdisk:mount \/dev\/ram0 \/tmp\/ramdisk0 如果对ramdisk的格式化失败,那就是你的内核不支持ramdisk。其内核配置选项是 CONFIG_BLK_DEV_RAM .执行df -k \/dev\/ram0 你实际用了多少...
如何在Linux内核里增加一个系统调用?
一、Linux0.11下添加系统调用:我在bochs2.2.1中对linux0.11内核添加了一个新的系统调用,步骤如下: 1.\/usr\/src\/linux\/include\/unistd.h中添加:#define __NR_mytest 87 然后在下面声明函数原型:int mytest(); 2.\/usr\/src\/linux\/include\/linux\/sys.h中添加:extern int sys_mytest(); 然后在sys_call_table...
怎么用gdb和bochs调试内核
(1).启动X window系统后打开两个终端窗口;(mPN(2).在一个窗口中,把工作目录切换进linux-gdb-rh9\/目录中,并运行程序“.\/run”,此时该窗口中会显示一条等待gdb来连接的信息:“Wait for gdb connection on localhost:1234”,并且系统会创建一个Bochs主窗口(此时无内容);1P=VI<(3).在另一个窗口中,我们把...