哪位高手跟我详细解释一下,windows操作系统工作的大概构架,嗯,流程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了哪位高手跟我详细解释一下,windows操作系统工作的大概构架,嗯,流程相关的知识,希望对你有一定的参考价值。
就是windows系统怎样基本运行,和外网连接,与其他软件(类似qq)契合,希望回答能明细一点,就是程序的每个部分的功能说到位,非常感谢!
嗯,两百分表现我的诚意
预了解Windows系统的工作原理,我们先从Windows的启动过程来讲解。同样,我们还是以windows XP为例。首先,从我们按下计算机电源开关,到正式登入到桌面,完成启动,一共需要经历以下5个阶段:
1. 预引导(Pre-Boot)阶段;
2. 引导阶段;
3. 加载内核阶段;
4. 初始化内核阶段;
5. 登陆。
下面,就每个启动阶段,我一一的给大家讲解一下:
1、预引导阶段
预引导(Pre-Boot)阶段是指,在按下计算机电源使计算机启动,并且在Windows XP专业版操作系统启动之前这段时间,在这个阶段里,计算机首先运行Power On Self Test(POST),POST检测系统的总内存以及其他硬件设备的现状。如果计算机系统的Bios(基础输入/输出系统)是即插即用的,那么计算机硬件设备将经过检验以及完成配置。计算机的BIOS定位计算机的引导设备,然后MBR(Master Boot Record)被加载并运行。在预引导阶段,计算机要加载Windows XP的NTLDR(NT Loader)文件。
2、引导阶段
Windows XP 专业版引导阶段包含4个小的阶段。
首先,计算机要经过初始引导加载器阶段,在这个阶段里,NTLDR将计算机微处理器从“实模式”转换为“32位平面内存模式”。在实模式中,系统为MS-DOS保留640kb内存,其余内存视为扩展内存,而在32位平面内存模式中,系统(Windows XP)视所有内存为可用内存。接着,NTLDR启动内建的mini-file system drivers,通过这个步骤,使NTLDR可以识别每一个用NTFS或者FAT文件系统格式化的分区,以便发现以及加载Windows XP,到这里,初始引导加载器阶段就结束了。
接着系统来到了操作系统选择阶段,如果计算机安装了不止一个操作系统(也就是多系统),而且正确设置了boot.ini使系统提供操作系统选择的条件下,计算机显示器会显示一个操作系统选单,这是NTLDR读取boot.ini的结果。如果在boot.ini中只有一个操作系统选项,或者把timeout值设为0,则系统不出现操作系统选择菜单,直接引导到那个唯一的系统或者默认的系统。在选择启动Windows XP后,操作系统选择阶段结束,硬件检测阶段开始。
在硬件检测阶段中,ntdetect.com将收集计算机硬件信息列表并将列表返回到NTLDR,这样做的目的是便于以后将这些硬件信息加入到注册表HKEY_LOCAL_MACHINE下的hardware中。
硬件检测完成后,进入配置选择阶段。如果计算机含有多个硬件配置文件列表,可以通过按上下按钮来选择。如果只有一个硬件配置文件,计算机不显示此屏幕而直接使用默认的配置文件加载Windows XP专业版。
3、加载内核阶段
在加载内核阶段,NTLDR加载Windows XP内核的。系统加载了Windows XP内核但是没有将它初始化。 接着NTLDR加载硬件抽象层,然后,系统继续加载HKEY_LOCAL_MACHINE\system键,NTLDR读取键值来决定哪一个Control Set将被加载。控制集中包含设备的驱动程序以及需要加载的服务。NTLDR加载HKEY_LOCAL_MACHINE\system\service\...下start键值为0的最底层设备驱动。当作为Control Set的镜像被加载时,NTLDR传递控制给内核,初始化内核阶段就开始了。
4、初始化内核阶段
在初始化内核阶段开始的时候,彩色的Windows XP的logo以及进度条显示在屏幕中央,在这个阶段,系统完成了启动的4项任务:
内核使用在硬件检测时收集到的数据来创建了HKEY_LOCAL_MACHINE\HARDWARE键。
内核通过引用HKEY_LOCAL_MACHINE\system\Current的默认值复制Control Set来创建了Clone Control Set。Clone Control Set配置是计算机数据的备份,不包括启动中的改变,也不会被修改。
系统完成初始化以及加载设备驱动程序,内核初始化那些在加载内核阶段被加载的底层驱动程序,然后内核扫描HKEY_LOCAL_MACHINE\system\CurrentControlSet\service\...下start键值为1的设备驱动程序。这些设备驱动程序在加载的时候便完成初始化。
Session Manager启动了Windows XP高级子系统以及服务,启动控制所有输入、输出设备以及访问显示器屏幕的Win32子系统以及Winlogon进程,初始化内核完毕。
5、登陆
Winlogon.exe启动LSA,同时Windows XP欢迎屏幕或者登陆对话框显示,这时候,系统还可能在后台继续初始化刚才没有完成的驱动程序。如果设有密码,提示输入有效的用户名或密码。
二、应用程序、系统、输入输出设备的关系
首先,我们来看计算机操作系统跟硬件设备的交互关系,操作系统可以操纵输出设备,以执行特定的的功能。例如让声卡发出声音,让显卡发出图形。当然操作系统也可以感知输入设备的状态变化,如鼠标移动、键盘按下,并且能够知道鼠标移动的具体位置、键盘按下的是哪一个字符。
其次,我们来看计算机操作系统跟应用程序之间的交互关系,应用程序可以通知操作系统执行某个具体的动作,例如操作系统能够让声卡发出声音,但它并不知道何时让声卡发出何种声音,需要应用程序告诉操作系统何时发出何种声音。我来为大家举个例子:这种关系好比有个机器人能够完成行走功能,但它并不知道何时往哪个方向走,需要人来告诉它往哪里走,这里机器人就好比操作系统、人就好比应用程序。那么应用程序是如何通知操作系统执行某个功能的呢?有过编程经验的人都知道,在应用程序中要完成某个功能,都是以函数调用的形式实现的。同样,应用程序也是通过函数调用的形式来通知操作系统的。操作系统所能完成的每一个功能,通常有一个特定函数与其对应,也就是说操作系统把它所能完成的功能以函数的形式提供给应用程序使用。应用程序对这些函数的调用就叫做系统调用。而这些函数的集合,就是windows操作系统提供给应用程序编程的接口,称为windows API 。这里,我再来简要的介绍下windows API,windows API是微软公司随Windows操作系统发布的应用程序接口,是Windows系统为其下运行的各类应用程序提供的重要服务功能。微软的所有Win32平台都支持统一的API调用,包括函数、结构、消息、宏及接口。通过Windows系统提供的API服务功能,应用程序可以充分挖掘Windows系统的潜力。API的核心是一组用C语言编写的供外部应用程序调用的函数过程,这些函数封装在Windows系统的一系列DLL动态库文件中。通过调用动态库文件中的函数,程序员可以在自己开发的应用中方便地向系统请求或执行更低级的设备访问,利用和控制系统资源,实现与系统相同或相似的功能。由此可以降低应用系统开发的复杂性,提高开发效率,并且无论是应用供应商还是最终用户都无需支付额外的费用。如Create windows 就是一个API函数,应用程序中调用这个函数,操作系统就会按照该函数提供的参数信息产生一个相应的窗口。同样,操作系统也能将输入设备的变化上传给应用程序。如用户在某个程序活动时按了一下键盘,操作系统马上能够感知到这一事件,并且能够知道用户按下的是哪个键,操作系统并不决定这一事件如何作出反应,而是将这一事件转交给相应应用程序,由应用程序来决定如何对这一事件作出反应。好,这里我再为大家举一个形象的例子:好比有一只蚊子叮了我们一口,我们的神经末梢,就相当于操作系统,马上感知到这一事件,它不做什么决定,而是马上将这一事件传递给大脑,大脑在这里就相当于应用程序。我们的大脑最终决定如何对这一事件作出反应,如将蚊子赶走,或是将蚊子拍死。对事件作出反应的过程就是消息响应。
那么操作系统是怎样将感知到的事件传递给应用程序的呢?这是通过消息机制(message)来实现的。操作系统将每一个事件都包装成一个称为消息的结构体MSG来传递给应用程序的。
下面详解windows内存数据加载(比较复杂):
以WINDOWS NT为例:
在刚开机加电时,根据X386CUP的特性,代码段(CS,CODE SEGMENT)寄存器的值为全1,指令计数器(IP,INSTRUCTION POINTER)的值为全0,既CS=FFFF、IP=0000。这时CPU根据CS和IP 的值执行FFFF0H处的指令。由于FFFF0H已经到了基本内存的高地址顶端,所以,FFFF0H处的指令一般总是一个JMP指令,jump到另一个位於ROM BIOS中的位置(就是执行BIOS中的系统测试代码,随着制作BIOS厂商的不同而会有些许差异 )它负责开机自检。如检查内存,键盘等。在自检过程中,ROM BIOS会在上位内存(UMB,UPPERMEMORY BLOCK)中进行扫描,看看是否存在合法的设备控制卡ROM BIOS(如:SCSI卡上的ROM),如果有,就执行其中的一些初始化代码。紧接着系统测试码之后,控制权会转移给ROM中的启动程序(ROM bootstrap routine),这个程序会将磁盘上的第零轨第零扇区读入内存中(这就是一般所谓的boot sector,如果你曾接触过电脑病毒,就大概听过它的大名。假定硬盘是系统的启动磁盘。硬盘的第一扇区称为主引导记录(MBR, MASTER BOOTRECORD)。MBR 的长度为512字节。可分为两部分:第一部分为引导(PRE-BOOT)区,占了446个字节;第二部分为分区表(PARTITION PABLE),共有66个字节,记录硬盘的分区信息。预引导区的作用之一是找到标记为活动(ACTIVE)的分区,并将活动分区的引导区读入内存。如果用软盘启动计算机,ROM BIOS 读入的是软盘的引导区,既软盘的第一个扇区。),至於被读到内存的哪里呢? --绝对位置07C0:0000(即07C00h处),这是IBM系列PC的特性。经过一系列复杂操作后,最后将控制权转移给操作系统。
对于linux而言,开机磁盘的boot sector上的正是linux的bootsect程序,也就是说,bootsect是第一个被读入内存中并执行的程序。(鉴于大家研究linux不多,linux有源代码可参,bootsect.S->setup.S->head.S ->main.c,所以我就将linux以后的启动略去,主要看Windows的启动,且主要对于NT而言,2k类似。--因为9X已成为历史)对于NT而言,boot sector上的正是Windows引导扇的引导代码(他是在Windows安装时被写入的). 当引导扇区被引导后,他首先查找NTLDR.(该文件必须存在于根目录下,否则系统提示:
BOOT:Couldn‘t find NTLDR.或A kernel file is missing from the disk.NT.接着该死机了)NTLDR首先将CPU从实模式转换到保护模式下.当NTLDR将所有的1M以下的内存页描述符创建好后,NTLDR再开启页映射功能,现在NT可以访问4G内存了.然后,NTLDR通过内建的文件系统代码来查找根目录下的BOOT.INI并根据BOOT.INI(这也是我们可以修改启动选项的地方)的内容提示用户可选的操作系统.当用户在缺省的时间内没有选择.NTLDR就引导缺省的操作系统.然后NTLDR加载NTDECT.COM.调用INTxx来执行一大堆的BIOS系统调用.用来进行系统配置的检测.所有检测到的东西将被存到系统注册表的HKLMHARDWAREDESCRIPTION项下. 接下来被加载的2个文件组成了WINDOWS NT的核心.那就是:HAL.DLL,NTOSKRNL.EXE.这2个文件在装载时将被检测PE校验和,如果有问题或找不到.NT又要死机了.加载完这2个文件后,NTLDR再加载所有引导必须的驱动程序,然后加载HKEY_LOCAL_MACHINESYSTEMServices里的值SERVICE_BOOT_S 参考技术A 系统中的每个程序运行流程都是一样的
首先操作系统有一个内核 这个内核是由各种进程/线程共同构成的 这些进程的创建过程与普通程序无异 只是权限更高级 执行的代码不太一样而已
系统内核中有某些代码负责程序的载入 就拿exe程序来说 首先要在内核中用程序的文件创建一个进程(这么解释:比如qq.exe文件是放在硬盘上的一个文件 要把它映射到内存中 为它创建一个实例 才能够运行)
创建进程的同时系统会把程序需要的各种模块(dll什么的)一起映射到同一个区域的内存中(比如qq.exe和dll本来放在硬盘的不同位置的两个文件 要把他们都放到同一区域的内存作为一个整体)
所有加载工作完成后就可以从程序入口点开始执行代码
以上是简化版的流程 实际上一个可执行文件的加载运行是个非常复杂的过程 系统还会干预程序的线程、内存、资源、代码、权限等等各方面的东西 不过大概来说 所有的程序都是这么运行的
这里解释一下exe和dll的区别 众所周知exe是双击就可以执行的那种文件 称为“可执行文件” 不过实际上dll也是“可执行文件” 只不过exe可以由系统自动完成以上说的各种加载 自动从入口点执行 而且系统为各个exe创建的内存空间是相互独立不能干扰的 而dll不一样 大多数的dll中也有代码 运行起来跟exe没什么区别 不过dll需要由程序自己或者系统“手动”加载 比如qq的登录框是有保护的 这就需要一个模块(dll)完成这个功能 而且这个dll是在exe开始运行的时候同时加载的 再举个例子 比如用QQ截图的时候 需要一个模块完成功能 但是不用的时候居多 那这个dll一直加载着就太耗费内存了 那qq就可以在需要的时候(比如按下了快捷键)的时候再手动加载这个dll然后运行其中的截图代码 这样既方便又节省内存空间 而且dll可以根据需要加载到不同进程的内存空间中去 比如现在我360要检测qq的动作 怎么办呢? 360和qq是两个进程不能互相干扰 那就让系统把360的内奸送到qq的进程空间中去就行了 请求内核为qq的进程添加一个360的模块 就可以了 然后这个模块再开个后门与360串通 就完美地契合起来了 不要觉得这貌似很不光彩 实际上这是非常重要且实际的手段 比如杀毒软件监测用户的动作 就需要把监测模块送到每个用户会使用的进程中去 刚才说的内核中管理界面的模块(user32.dll)基本内核模块(kernel32.dll kernel.dll )等等这些模块都是被这样加载到每一个程序的内存空间中去的 得以保证每一个程序都有相同的系统资源可以使用
另外dll中的每个功能(function 函数)可以做成分散的 我需要某个功能就运行某个function 不像exe每次都只能从入口点按顺序执行下去
大致的构造就这样 联网也是由程序自身 或者某个模块(dll)来完成功能的 联网的时候需要向系统请求网络资源 相当于让系统(内核)来搭个桥 让程序可以像读写文件那样读写网络上的数据 就可以了 如果你学编程的话 就会明白 读写文件的function和读写网络的function是同一个祖先的
除了以上 系统本身的运行还有许多更底层的东西 比如怎样管理各个进程 怎样管理内存、硬盘等各种硬件 怎样优化CPU的使用…………………… 对于你不需要知道那么多 如果有兴趣研究的话 最好先学编程 然后找本讲系统底层的书开始看
BDW其实所谓的安装只是把压缩包解开 复制到硬盘上的某个地方 往注册表里写点数据而已 没有其他东西
------------------------------------------------------平凡の分割线----------------------------------------------
我居然写了这么多…………本回答被提问者采纳 参考技术B …你这个问题无法回答。
看你提的问题,貌似也对系统不是特别了解。
完整的回答你这个问题需要你有N多的基础知识,比如编程、系统内核等等方面的知识,你得明白一些专有名词比如进程、驱动、Hook、等等才行。
且不说你的问题太大根本无从答起,就算有人有能力完全回答,你能看懂么??
一个系统几亿行代码,你知不知道??
你要么就放弃这个问题,要么问点具体的,脑子里有点基本概念了再问,别问些不着边的。追问
呃,可能是我问的不清楚,好吧,其实我只是想知道类似qq/360等应用程序他们是怎样在windows系统运行的,比如说,嗯,qq安装时它是怎样嵌入windows里面的,或者说是怎样通过windows运行他自己的程序,嗯,我只能表达到这个程度了,如果还是没人能解惑只能流分了,唉
追答…恩,稍微好一点了。不过本人也保证不了完全讲的正确和完整,你自己取舍。
恩,首先,是软件去兼容系统,而不是系统兼容软件。软件需要遵守Windows 的规则才能正常运行。
比如,任何有用户界面的程序,都需要用到系统的一些DLL文件才能正常运行。
至于你说什么[怎么镶入Windows],本人还真是不太好理解。
程序安装的时候就是释放文件到你指定的位置,然后写入一些信息到系统注册表,之后再创建一些快捷方式,并可能进行一些附加操作就是了。
系统本人认为就是个大的村落,程序就是一些住户,这些住户需要使用村落的资源并遵守其规则才能生存。
只与再具体的那每个程序各有不同,调用的系统组件也不同。
比如有些游戏就需要调用系统的Directx组件才能运行。
如果你还有问题建议你分的细一点,你的问题还是太广太大,无从下手回答。
基本运行?你想知道你按下ctrl+c ctrl+v后操作系统到底和硬件怎么沟通?
抱歉,这不是开源系统!老比尔目前还不打算答应公开
和外网连接?这得啃tcpip协议和操作系统有关系但不是主要的,我打赌你是不会愿意的~
与其他软件.......老比尔只提供API接口,这就够了,其他一概不管
鉴于如此好学,建议报考蓝翔吧~追问
是山东蓝翔吗,好的,我会考虑的,不过他们好像是教机械操作的,嗯,还不如去旁听我们自己学校的计算机系呢
参考技术D 你知道那是多少人的智慧结晶吗?你给两万分都说不完…那些问题都是在无数个开发者脑中储存着,你只要都学会用就很不错了!别介意!呵呵以上是关于哪位高手跟我详细解释一下,windows操作系统工作的大概构架,嗯,流程的主要内容,如果未能解决你的问题,请参考以下文章
麻烦哪位高手帮忙解释一下c语言中gcd函数的用法,最好整点简单的例子,谢啦
哪位高手指点一下如何在网站内添加一套论坛程序,比如Discuz? 最好能详细一点。