第七章——Windows内核基础-内核理论基础(内存空间布局,Windows与内核启动过程)

1.内存空间布局

X86系统支持32位寻址,因此支持2^32=4GB的虚拟内存空间,windwos系统的内存主要分为内核空间和应用层空间

每部分占2GB,其中包括一个64KB的NULL空间以及非法区域。

windows内存的逻辑地址分为两部分:

段选择符和偏移地址,CPU在进行地址翻译的时候,先通过分段机制计算出一个线性地址,在通过页表机制将线性地址映射到物理地址,再从物理内存中读取数据和指令

X64的内存布局与X86的内存布局类似,X64下存在一些空洞,并且X64的最大寻址空间为2^64KB的寻址空间

但是实际上X64的空间太大,很多没有用到。X64下一般只支持到40多位

2.Windows与内核启动过程

windows启动步骤如下:

⑴启动自检阶段

打开电源时,计算机先从BIOS中载入指令,然后进行一系列的自检操作,进行硬件的初始化检测(硬盘,键盘等等),同时在屏幕上显示信息

⑵初始化启动阶段

自检完成后,根据CMOS设置,BIOS加载启动盘,将主引导记录(MBR)中的引导代码载入内存执行,接着,启动过程由MBR执行,启动代码搜索MBR中的分区表

找到活动分区,将第一个扇区中的引导代码载入内存,引导代码检测当前使用的文件系统,查找ntldr文件,找到之后将启动它,BIOSde 控制权交给ntldr,由ntlad完成操

作系统的启动工作(windows7是bootmgr)

⑶Boot加载阶段

这里启动分区加载ntldr,然后对ntldr进行如下设置

①设置内存模式,如果是32位操作系统,设置32-bit flat memory, 64位反之

②启动一个简单的文件系统,定位boot.ini. ntoskrnl.Hal等启动文件

③读取boot.ini文件

⑷检测和配置硬件阶段

在这个阶段会检查和配置一些硬件设备,显示适配器,键盘,磁盘,鼠标等等

⑸内核加载阶段

ntldr将首先加载windows内核Ntoskrnl.exe和硬件抽象层(HAL).HAL会对硬件底层的特征进行隔离,为操作系统提供统一接口,接下来 ntldr从注册表读取驱动程序,

依次加载驱动,初始化底层设备驱动,在注册表中找start键的值为0和1的设备驱动 ,start键的值为0.1.2.3.4,数值越小,启动越早。0表示内核刚刚初始化,此时加载的都是与系统核心有关的重要驱动程序。1表示稍晚一些 ,2是从登录界面出现的时候,3表示需要手动加载,4表示禁止加载

⑹windows的会话管理启动

驱动程序记载完成,内核会启动会话管理器,这是smss.exe的程序,是windows系统中第一个创建的进程,作用:

1.创建系统环境变量

2.加载win32k.sys 它是windows子系统的内核模式部分

3.启动csrss.exe ,它是windows子系统的用户模式部分

4.启动winlogon.exe(后面解释)

5.创建虚拟内存页面文件

6.执行上次重启前未执行的重命名工作

⑺登陆阶段

windows子系统启动的winlogon.exe系统服务提供对windows用户的登陆和注销,可以完成如下操作:

1.启动服务子系统(services.exe) 也称服务控制管理器 SCM

2.启动本地安全授权(LSA)过程

3.显示登陆界面

登陆过程中对用户的账号密码传递给LSA后,通过之后,用户就可以操作windows系统

win7和XP在启动过程中的区别

  • BIOS通过自检后,将MBR载入内存并执行,引导代码找到管理器Bootmgr
  • Bootmgr寻找活动分区Boot文件夹中的启动配置数据BCD文件,读取对应的语言启动菜单,然后再屏幕上显示多操作系统选择画面
  • 选择win7后,Bootmgr就会读取系统文件 winload(在system文件夹中)
  • 此时系统的执行权都交给winload, winload加载win7的内核,硬件,服务等等,然后加载桌面信息,从而启动系统

新一代的系统引导方式UEFI和GPT

上面说的系统引导与启动,主要借助BIOS和MBR完成系统的引导和启动,具有一定的局限性,局限性:磁盘逻辑块地址是32位,最多表示2^32个扇区,

而且每个扇区大小一般都是512字节,所以最多支持2^32*521=2*2^20字节(2TB)在BIOS中,启动操作系统之前必须从硬盘上读取扇区中读取启动代码,然后从分区中引导启动操作系统,对扇区的操作远不上分区中文件的操作那样简单

为了打破BIOS和MBR引导的局限,新的UEFI和GPT。

UEFI:统一的可扩展固件接口。在UEFI中,用于表示LBA的地址还是64位,突破了BIOS和MBR分区容量问题,UEFI本身就是一个操作系统,具有文件系统,能够直接读取FAT中的文件,可以将windwos安装程序做成efi类型的应用程序,然后放到任意分区直接运行,在UEFI中不需要引导操作,不需要活动分区,只需要在FAT32分区活在U盘中,通过这个分区或者U盘启动windows

与MBR分区表比,GPT(全区唯一标识分区表)对分区数量没有限制,但是windows还是将GPT将分区限制到128个,GPT可管理磁盘大小达到18EB,因此只有基于UEFI平台的主板才支持GPT分区引导启动

原文地址:https://www.cnblogs.com/Tempt/p/10159354.html

时间: 2024-08-14 06:53:17

第七章——Windows内核基础-内核理论基础(内存空间布局,Windows与内核启动过程)的相关文章

第七章、函数基础之函数的调用05

目录 第七章.函数基础之函数的调用05 一.什么是函数调用? 二.函数调用的三种形式 第七章.函数基础之函数的调用05 一.什么是函数调用? 函数名()就会调用函数,会执行函数体代码,直到碰到return或者完函数体所有代码 运行完函数体内代码,如果没有return就会返回none def foo(): pass print(foo()) 二.函数调用的三种形式 def max_self(x,y): if x>y: return x else: return y \# 1. max_self(1

第七章、函数基础之定义函数的三种方式03

目录 第七章.函数基础之定义函数的三种方式03 一.无参函数 二.有参函数 三.空函数 第七章.函数基础之定义函数的三种方式03 一.无参函数 定义函数时参数是函数体接收外部传值的一种媒介 在函数阶段括号没有参数就是无参函数.调用时不需要传入实参 如果函数体代码逻辑不需要依赖外部传入值,必须定义成无参函数 def func(): print('hello nick') func() # hello nick 二.有参函数 在函数阶段括号有参数就是有参函数.调用时需要传入实参 如果函数体代码逻辑需

第七章、函数基础之函数的返回值04

目录 第七章.函数基础之函数的返回值04 一.什么是返回值 二.为什么要有返回值 第七章.函数基础之函数的返回值04 一.什么是返回值 函数内部代码经过一些列逻辑处理获得的结果. def func(): name = 'nick' return name name = func() print(name) nick 二.为什么要有返回值 如果需要在程序中拿到函数的处理结果做进一步的处理,则需要函数必须要有返回值 注意: return是函数结束的标志 return的返回值可以返回任意数据类型 re

第七章:Python基础のXML操作和面向对象(上集)

本課主題 XML介绍和操作实战 shutil 模块介绍和操作实战 subprocess 模块介绍和操作实战 XML介绍和操作实战 對於浏览器返回的字符串有以下幾種: HTML JSON,表现是列表和字典的格式 XML XML的應用 一个属性里包含多过属性,一类是页面上做展示的时候可以用到XML,就是为别人来调用(这也是字符串类型的一个XML格式数据);另外一类是配置文件.你可以從文件裡打開一個XML文件,它返回的是一個XML形式的字符串:也可以通過發送 HTTP請求,返回一個 XML 形式的字符

内核基础 - 寄存器与内存寻址(by quqi99)

作者:张华  发表于:2016-03-01 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) 汇编 汇编编译器assembler编译目标代码二进制文件(nasm -f elf -g -F stabs *.asm),连接器linker(ld -o bin_file *.o)除了把目标代码组合成一个单个的块,还要确保模块以外的函数调用能够指向正确的内存引用(连接器必须建立一个索引,也就是符号表,里面

[iOS基础控件 - 6.10.7] UIWindow & 程序启动过程

A.UIWindow概念 1.继承UIView,是一种特殊的UIView 2.通常一个APP只有一个UIWindow 3.iOS程序启动后,创建的第一个视图就是UIWindow 4.没有UIWindow,不能显示任何东西 B.使用 1.创建一个Empty Application项目 没有了storyboard,要手动实现UIWindow的创建代码(其实这就是storyboard做的事情) 1 // 手动创建UIWindow,并加到screen上 2 self.window = [[UIWindo

第三章 Android 启动过程的底层实现

转载请标明出处: http://blog.csdn.net/yujun411522/article/details/46367787 本文出自:[yujun411522的博客] 3.1 android正常模式启动流程 主要流程如下: 1.系统加电,执行bootloader,bootloader会将内核加载到内存中. 2.内核加载到内存之后首先进入内核引导阶段,最后调用start_kernel进入内核启动,start_kernel最终会启动init程序 3.init程序负责解析init.rc文件并

Linux内核分析——第七章 链接

第七章——链接 1.链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载到存储器并执行. 2.链接可以执行于编译时,加载时,运行时. 7.1编译器驱动程序 1.大多数编译系统提供编译驱动程序,它代表用户在需要时调用语言预处理器.编译器.汇编器和链接器. 7.2 静态链接 1.像Unix ld程序这样的静态链接器以一组可重定位目标文件和命令行参数作为输入,生成一个完全链接的可以加载运行的可执行目标文件作为输出. 2.输入的可重定位目标文件由各种不同的代码和数据节组成.

《Linux内核设计与实现》第七章读书笔记

第七章 链接 链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或拷贝)到存储器并执行. 链接可以执行于编译时,也就是在源代码被翻译成机器代码时:也可以执行于加载时,也就是在程序被加载器加载到存储器并执行时:甚至执行于运行时,由应用程序来执行. 在早期的计算机系统中,链接是手动执行的.在现代系统中,链接是由叫链接器的自动执行的. 7.1 编译器驱动程序 大多数编译系统提供编译驱动程序,它代表用户在需要时调用语言预处理器.编译器.汇编器和链接器. 例子: 函数mai