当前位置: 首页 > news >正文

大楼物流公司网站源码郑州seo服务

大楼物流公司网站源码,郑州seo服务,关于协会网站建设的几点思考,免费邯郸网站建设基于网上搜索的版本以及历届师兄的版本,进行了整合和修改 对应参考书籍如下,对应P页数也是指该书的页数。 1.为什么开始启动计算机的时候,执行的是BIOS代码而不是操作系统自身的代码? 最开始启动计算机的时候,计算机内存未初始化,没有任何程序。而因为CPU只能读取内存中…

基于网上搜索的版本以及历届师兄的版本,进行了整合和修改

对应参考书籍如下,对应P页数也是指该书的页数。

1.为什么开始启动计算机的时候,执行的是BIOS代码而不是操作系统自身的代码?

最开始启动计算机的时候,计算机内存未初始化,没有任何程序。而因为CPU只能读取内存中的程序,所以必须将操作系统先加载进内存当中。需要使用BIOS。在加电后, BIOS 需要完成一些检测工作,设置实模式下的中断向量表和服务程序,并将操作系统的引导扇区加载至 0x7C00 处,然后将跳转至 0x7C00运行操作系统自身的代码。所以计算机启动最开始运行的是BIOS代码。

 

2.为什么BIOS只加载了一个扇区,后续扇区却是由boots ect代码加载?为什么BIOS没有直接把所有需要加载的扇区都加载?

BIOS和操作系统的开发通常是不同的团队,按固定的规则约定,可以进行灵活的各自设计相应的部分。BIOS接到启动操作系统命令后,只从启动扇区将代码加载至0x7c00(BOOTSEG)位置,而后续扇区由bootsect代码加载,这些代码由编写系统的用户负责,与之前BIOS无关。这样构建的好处是站在整个体系的高度,统一设计和统一安排,简单而有效。

如果要使用BIOS进行加载,而且加载完成之后再执行,则需要很长的时间,因此Linux采用的是边执行边加载的方法。

 

3.为什么BIOS把bootsect加载到0x07c00,而不是0x00000?加载后又马上挪到0x90000处,是何道理?为什么不一次加载到位?

加载0x07c00是BIOS提前约定设置的,不能加载到0x00000是因为从0x00000开始到0x003ff这1KB内存空间都是BIOS首先约定进行加载中断向量表的地方,不能进行覆盖。

而后挪到0x90000处是操作系统开始根据自己的需要安排内存了,具体原因如下:

① 内核会使用启动扇区中的一些数据,如第 508、509 字节处的 ROOT_DEV;

② 依据系统对内存的规划,内核占用 0x00000 开始的空间,因此 0x07c00 可能会被覆盖。

 

4.bootsect、setup、head程序之间是怎么衔接的?给出代码证据。

bootsect跳转到setup程序:jmpi 0,SETUPSEG;

bootsect首先利用int 0x13中断分别加载setup程序及system模块,待bootsect程序的任务完成之后,执行代码jmpi 0,SETUPSEG。由于 bootsect 将 setup 段加载到了 SETUPSEG:0 (0x90200)的地方,在实模式下,CS:IP指向setup程序的第一条指令,此时setup开始执行。

setup跳转到head程序:jmpi 0,8

执行setup后,内核被移到了0x00000处,CPU变为保护模式,执行jmpi 0,8

并加载了中断描述符表和全局描述符表。该指令执行后跳转到以GDT第2项中的 base_addr 为基地址,以0为偏移量的位置,其中base_addr为0。由于head放置在内核的头部,因此程序跳转到head中执行。

 

5.setup程序的最后是jmpi 0,8 ,为什么这个8不能简单的当作阿拉伯数字8看待,究竟有什么内涵?

此时为32位保护模式,“0”表示段内偏移,“8”表示段选择符。转化为二进制:1000

最后两位00表示内核特权级,第三位0表示 GDT 表,第四位1表示根据GDT中的第2项来确定代码段的段基址和段限长等信息。可以得到代码是从head 的开始位置,段基址 0x00000000、偏移为 0 处开始执行的。

 

6.保护模式在“保护”什么?它的“保护”体现在哪里?特权级的目的和意义是什么?分页有“保护”作用吗?p438-440

(1保护模式在“保护”什么?它的“保护”体现在哪里?

保护操作系统的安全,不受到恶意攻击。保护进程地址空间。

“保护”体现在

打开保护模式后,CPU 的寻址模式发生了变化,基于 GDT 去获取代码或数据段的基址,相当于增加了一个段位寄存器。防止了对代码或数据段的覆盖以及代码段自身的访问超限。对描述符所描述的对象进行保护:在 GDT、 LDT 及 IDT 中,均有对应界限、特权级等;在不同特权级间访问时,系统会对 CPL、 RPL、 DPL、 IOPL 等进行检验,同时限制某些特殊指令如 lgdt, lidt,cli 等的使用;分页机制中 PDE 和 PTE 中的 R/W 和 U/S 等提供了页级保护,分页机制通过将线性地址与物理地址的映射,提供了对物理地址的保护。

(2)特权级的目的和意义是什么?

特权级机制目的是为了进行合理的管理资源,保护高特权级的段。

意义是进行了对系统的保护,对操作系统的“主奴机制”影响深远。Intel 从硬件上禁止低特权级代码段使用部分关键性指令,通过特权级的设置禁止用户进程使用 cli、 sti 等指令。将内核设计成最高特权级,用户进程成为最低特权级。这样,操作系统可以访问 GDT、 LDT、 TR,而 GDT、 LDT 是逻辑地址形成线性地址的关键,因此操作系统可以掌控线性地址。物理地址是由内核将线性地址转换而成的,所以操作系统可以访问任何物理地址。而用户进程只能使用逻辑地址。总之,特权级的引入对操作系统内核进行保护。

(3)分页有“保护”作用吗?

分页机制有保护作用,使得用户进程不能直接访问内核地址,进程间也不能相互访问。用户进程只能使用逻辑地址,而逻辑地址通过内核转化为线性地址,根据内核提供的专门为进程设计的分页方案,由MMU非直接映射转化为实际物理地址形成保护。此外,通过分页机制,每个进程都有自己的专属页表,有利于更安全、高效的使用内存,保护每个进程的地址空间。

为什么特权级是基于段的?(超纲备用)

通过段,系统划分了内核代码段、内核数据段、用户代码段和用户数据段等不同的数据段,有些段是系统专享的,有些是和用户程序共享的,因此就有特权级的概念。

 

7.在setup程序里曾经设置过gdt,为什么在head程序中将其废弃,又重新设置了一个?为什么设置两次,而不是一次搞好?

P33点评

 

8.进程0的task_struct在哪?具体内容是什么?

进程0的task_struct位于内核数据区,因为在进程0未激活之前,使用的是boot阶段的user_stack,因此存储在user_stack中。

具体内容如下:

包含了进程 0 的进程状态、进程 0 的 LDT、进程 0 的 TSS 等等。其中 ldt 设置了代码段和堆栈段的基址和限长(640KB),而 TSS 则保存了各种寄存器的值,包括各个段选择符。

代码如下:(若未要求没时间可不写)

INIT_TASK的定义见P68。

 

9.内核的线性地址空间是如何分页的?画出从0x000000开始的7个页(包括页目录表、页表所在页)的挂接关系图,就是页目录表的前四个页目录项、第一个个页表的前7个页表项指向什么位置?给出代码证据。

如何分页

head.s在setup_paging开始创建分页机制。将页目录表和4个页表放到物理内存的起始位置,从内存起始位置开始的5个页空间内容全部清零(每页4KB),然后设置页目录表的前4项,使之分别指向4个页表。然后开始从高地址向低地址方向填写4个页表,依次指向内存从高地址向低地址方向的各个页面。即将第4个页表的最后一项指向寻址范围的最后一个页面。即从0xFFF000开始的4kb 大小的内存空间。将第4个页表的倒数第二个页表项指向倒数第二个页面,即0xFFF000-0x1000开始的4KB字节的内存空间,依此类推。

挂接关系图

代码证据

P39最下面

 

10.在head程序执行结束的时候,在idt的前面有184个字节的head程序的剩余代码,剩余了什么?为什么要剩余?

剩余代码:

包含代码段如下after_page_tables(栈中压入了些参数)、 ignore_int(初始化中断时的中断处理函数) 和 setup_paging(初始化分页)。

剩余的原因:

after_page_tables 中压入的参数,为内核进入 main 函数的跳转做准备。设计者在栈中压入了 L6: main,以使得系统出错时,返回到 L6 处执行。

ignore_int 为中断处理函数,使用 ignore_int 将 idt 全部初始化,如果中断开启后存在使用了未设置的中断向量,那么将默认跳转到 ignore_int 处执行,使得系统不会跳转到随机的地方执行错误的代码。

setup_paging 进行初始化分页,在该函数中对 0x0000 和 0x5000 的进行了初始化操作。该代码用于跳转到 main,即执行“ret”指令。

 

11.为什么不用call,而是用ret“调用”main函数?画出调用路线图,给出代码证据。

CALL 指令会将 EIP 的值自动压栈,保护返回现场,然后执行被调函数,当执行到被调函数的ret指令时,自动出栈给 EIP 并还原现场,继续执行CALL 的下一行指令。在由head程序向main函数跳转时,不需main函数返回;且因为main函数是最底层的函数,无更底层的函数进行返回。因此要达到既调用 main又不需返回,选择ret。

调用路线图:见P42 图1-46。仿call示意图 下面部分

代码证据:

 

12.用文字和图说明中断描述符表是如何初始化的,可以举例说明(比如:set_trap_gate(0,&divide_error)),并给出代码证据。

(先画图见P54 图2-9然后解释)以set_trap_gate(0,&divide_error)为例,其中,n是0,gate_addr是&idt[0],也就是idt的第一项中断描述符的地址;type是15,dpl(描述符特权级)是0;addr是中断服务程序divide_error(void)的入口地址。

代码证据:P53 代码

 

13.在IA-32中,有大约20多个指令是只能在0特权级下使用,其他的指令,比如cli,并没有这个约定。奇怪的是,在Linux0.11中,3特权级的进程代码并不能使用cli指令,这是为什么?请解释并给出代码证据。

根据Intel Manual,cli和sti指令与CPL和EFLAGS[IOPL]有关。通过IOPL来加以保护指令in,ins,out,outs,cli,sti等I/O敏感指令,只有CPL(当前特权级)<=IOPL才能执行,低特权级访问这些指令将会产生一个一般性保护异常。

IOPL位于EFLAGS的12-13位,仅可通过iret来改变,INIT_TASK中IOPL为0,在move_to_user_mode中直接执行“pushfl \n\t”指令,继承了内核的EFLAGS。IOPL的指令仍然为0没有改变,所以用户进程无法调用cli指令。因此,通过设置 IOPL, 3特权级的进程代码不能使用 cli 等I/O敏感指令。

具体代码:move_to_user_mode()此处一共两部分代码第一部分 P79

#define move_to_user_mode() \

__asm__(“movl %%esp, %%eax\n\t” \

                   ……

                   “pushfl\n\t” \                               // ELAGS 进栈

                   ……

”)

第二部分代码见P 68 INIT_TASK

 

15.在system.h

#define _set_gate(gate_addr,type,dpl,addr) \

__asm__ ("movw %%dx,%%ax\n\t" \

         "movw %0,%%dx\n\t" \

         "movl %%eax,%1\n\t" \

         "movl %%edx,%2" \

         : \

         : "i" ((short) (0x8000+(dpl<<13)+(type<<8))), \

         "o" (*((char *) (gate_addr))), \

         "o" (*(4+(char *) (gate_addr))), \

         "d" ((char *) (addr)),"a" (0x00080000))

#define set_intr_gate(n,addr) \

         _set_gate(&idt[n],14,0,addr)

 

#define set_trap_gate(n,addr) \

         _set_gate(&idt[n],15,0,addr)

#define set_system_gate(n,addr) \

         _set_gate(&idt[n],15,3,addr)

http://www.ds6.com.cn/news/117179.html

相关文章:

  • 外贸 网站 源码网站排名提升软件
  • 网站开发编写籍贯代码在线种子资源库
  • 网站降权查询爱站网站长seo综合查询工具
  • 做网站如何提需求2023能用的磁力搜索引擎
  • 珠海住建网站seo研究所
  • 企业邮箱注册方法性价比高seo排名
  • 做网站大概需要几步企业如何做网站
  • 建设一个微商的网站短信营销平台
  • 建设微网站上海seo顾问
  • 做网站专用图标sem推广软件哪家好
  • 贵阳公司网页网站建设seo外包公司是啥
  • 静安区建设工程招标投标管理部门网站网站优化推广方法
  • 网络广告的特征是()多选题seo模板建站
  • 做网站可以找设计公司吗网络营销的培训课程
  • 北京网站搜索引擎优化百度一下进入首页
  • 网页设计培训全名seo薪酬
  • 微网站分销代运营公司排名
  • 做家装的网站有什么厦门seo哪家强
  • 青海高端网站建设价格重庆优化seo
  • 做目录网站注意长沙网站关键词排名公司
  • 如何利用路由建设网站代运营电商公司
  • python基础教程文档seo顾问公司
  • 网站维护和推广温州seo品牌优化软件
  • 沙洋网站开发淘宝seo是什么意思
  • 免费做英语卷子的网站广州网站优化方式
  • 南阳哪里做网站比较好厦门seo厦门起梦
  • 有人知道做网站吗?济宁seo优化公司
  • 可信赖的企业网站开发辽宁好的百度seo公司
  • 网站制作长沙百度广告竞价
  • 专业商城网站建设报价线上推广app