首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

ucore-lab1

也就是异常里可以出现异常 系统调用采用int和iret指令,可以进行堆栈切换以及特权级的转换,函数调用采用call和ret指令,一般情况下没有堆栈切换 遗漏的知识点参考kiprey,仅记录本人不熟悉的知识点 bios/linux.../dos中断的区别 bios/dos建立在实模式下,他们建立的中断调用都采用中断向量表,linux则是在进入保护模式后才建立中断例程,通过中断描述符表idt实现中断 文件 os通过文件系统的magic...IOPL(I/O Privilege Level)即I/O特权标志,位于eflag寄存器中,用两位二进制位来表示,也称为I/O特权级字段。该字段指定了要求执行I/O指令的特权级。...如 果当前的特权级别在数值上小于等于IOPL的值,那么,该I/O指令可执行,否则将发生一个保护异常。 只有当CPL=0时,可以改变IOPL的值,当CPL<=IOPL时,可以改变IF标志位。...create_target,ucore.img) 其中dd命令和cp差不多,但dd更多的针对底层文件的复制. if和ifeq差不多,仍是实现条件判断的语句,实际上是判断后面的文件是否存在,比如/dev/zero就存在于linux

1.8K30

linux内核上下文切换解析

linux的上下文切换就是进程线程的切换,也就是切换struct task_struct结构体,一个任务的上下文包括cpu的寄存器,内核栈等,由于1个cpu上的所有任务共享一套寄存器,所以在任务挂起的时候需要保存寄存器...但是Linux为了适用更多的cpu架构没使用处理器相关的上下文切换技术,而是大部分通过软件实现。linux上下文切换就在schedule()函数里,很多地方都会调用这个函数。...先看一段linux2.6.18版本还使用O(1)调度算法的schedule函数代码: /* * schedule() is the main scheduler function. */ asmlinkage...next->gs) loadsegment(gs, next->gs); /* * 如果prev和next的IO特权级不一样则需要重新装载 */ if (unlikely(prev->iopl...= next->iopl)) set_iopl_mask(next->iopl); /* * 处理debug寄存器和IO位图 */ if (unlikely((task_thread_info

1.2K30

xv6(15) 进程一:数据结构

记录管理着文件的信息,当可执行文件被加载到内存当作进程执行后,也有类似的数据结构来记录管理进程的执行情况,这个数据结构就是 $PCB(Process\ Control\ Block)$,进程控制块,$Linux...而 $IO$ 端口映射,使用 in/out 指令访问外设端口的方式也有特权级检查,这是由 EFLAGS 的 IOPL 位和 $TSS$ 的 $IO$ 位图共同决定 EFLAGS 的 IOPL 位共 $2...\ bit$,四种组合分别对应 $0,1,2,3$ 四种特权级,IOPL 是一个总开关,“只有”当前特权级大于 IOPL 才允许使用 $IO$ 指令,也就是说数值上 $CPL \leq IOPL$ 时才能使用...$IO$ 位图这个局部开关要在 $CPL \geq IOPL$ 的时候才有效,$CPL \leq IOPL$ 的时候本身就允许使用 $IO$ 指令对所有端口访问,$IO$ 位图是不起作用的。...准确点来说应该是下图这样: 图中有鲜明显色的区域都是实际映射到了物理内存的区域,其中蓝色部分才是 $malloc\ free$ 作用的区域,在 $Linux$ 中程序在内存中的映像有个属性叫做 $break

19010

保护模式究竟“保护”了什么

记录当前正在运行的代码所在内存段的特权级 描述符特权级 DPL — 位于 GDT 与 LDT 对应字段内,定义了一段内存的特权级 访问特权级 RPL — 位于段选择子中的低两位,用于在程序跳转中动态决定权限与 CPL IO 特权级 IOPL...IO 特权级 — IOPL 上文已经提到,位于 eflags 的 12、13 位的 IOPL 字段,控制了 IO 敏感指令的执行。...IO 敏感指令包括:in、ins、out、outs、cli、sti 这些指令只有在 CPL <= IOPL 时才能够执行。...而有两个非常特殊的指令:popf和iretf,他们能够改变 eflags 的 IF 位,这显然也是一个很敏感的操作,因此同样限制了只有在 CPL <= IOPL 时,这两个指令才能够实现 eflags...IO 的保护 通过 eflags 上的 IOPL 特权级与 TSS 指向的 IO 位图,IO 敏感操作也具有了严格的权限限制。

99920
领券