点击一个程序,程序在操作系统的工作过程

转载 2016年06月01日 00:55:06

需编辑。。。

假设我们刚刚把电脑启动完成,然后立即浏览百度首页.(这样做的用意是提供一个DNS 缓存表为空的环境)
 

  


图十八  使用程序
浏览百度首页


  在我们输入www.baidu.com (编者注:www.baidu.com 准备地来说是网站的域名) 使浏览器访问的时候,它会先把域名转换到IP 地址(即:解析,用gethostbyname() 函数实现) .此时WinSock 会从本地的DNS (用于解析域名和IP 地址的协议)缓存表(在本机里面的一张专门存放域名和对应的IP 地址的数据块) 中寻找www.baidu.com 的IP 地址.由于主机是刚刚启动的,所以DNS 缓存表还是一片空白.WinSock 从DNS 缓存表中找不到对应的IP 地址,于是就向DNS 服务器发送查询域名请求(即:DNS 指针查询).DNS 服务器接收到该请求后会在本地查询该域名,假如该DNS 服务器没有该域名和对应的IP 地址的话,那该DNS 服务器便会向比它更高级的DNS 服务器提交查询,一直到查询结果得到为止.成功则返回查询成功数据包,如果还是查询不到的话DNS 服务器会返回查询失败数据包.  [该过程为域名转换到IP 过程,用专业的语言来说就是:域名解析过程]

  有了IP 地址,浏览器就向它发送TCP 连接请求,接下来就是三次握手过程.连接成功建立后,浏览器会向百度的服务器发送获取http://www.baidu.com/index.html (编者注:www.baidu.com/index.html 的意思是百度首页的index 索引网页的.HTML 文件(网页代码文件))的源代码.随后,百度服务器返回索引网页的源代码,并且主动关闭TCP 连接.最后浏览器便根据这里面的源代码逐一显示在程序的网页浏览控件上.

  思考题:请你联系该文章所讲述到的知识认真地想一想系统是怎么样去一步步实现的呢?



  与主题无关的相关知识:

  *程序启动过程:

  在我们双击程序时,Explorer.exe 会调用CreateProcess() 运行该程序.CreateProcess() 立即读取程序文件(即: .EXE 文件) 的PE (PreInstallation Environment ,预安装环境.这个是Windows 特有的程序结构,它的用意是告诉Windows 系统在运行程序之前需要先做哪些东西.详细请见:http://baike.baidu.com/view/3326.htm?fromId=8358 Windows PE 结构 - 百度百科) 结构,Windows 系统会根据.EXE 的需求先做一些相关的工作,比如:程序需要加载到哪一个内存位置?程序代码的入口点在哪儿?系统加载完成后,就将这个程序从硬盘中把程序文件映射到内存中 (内存映射).接下来CreateProcess() 会给该程序分配堆栈,最后再创建线程来执行该程序.假如我们运行的是.INK 文件(即:快捷方式),Explorer.exe 会解析.INK 文件,从中获取到目的程序的运行路径.

  *VB 程序运行细节:

  由于VB 程序在设计窗口界面的时候完全使开发者避免怎么样用代码把控件一个个创建.读者们可以联系下Win32 窗口程序的开发.首先,在WinMain() (即:Win32 应用程序入口点) 的时候程序就开始注册->创建窗口了.在创建窗口完成后(注意,此时窗口只是空白的!),Windows 系统会向该窗口发送WM_PRINT 消息通告窗口开始画控件.

  Q:既然说刚刚创建窗口的时候是空白的,那为什么我们没有先看到空白的窗口再看到程序一步步在窗口上面画控件呢?
  A:因为处理器执行代码的速度太快了,所以它在绘画的过程中只使用了非常短的时间,以至于人类的眼晴不能接收到这些图像.

  *内核处理按键过程:

  在我们输入完成网址后按下键盘的Enter 键,键盘会主动向处理器引发中断事件.由于计算机系统中中断种类太多,而且对于不同的中断有不同的处理方法,于是人们把各个不同的中断处理程序的入口地址储存在中断程序入口表.这是键盘所引发的中断,那处理器接收到这个中断的时候立即跳出当前正在运行的程序,转而去运行键盘中断程序,当键盘中断程序执行结束后,处理会继续执行原先的暂停运行的代码.

  这个被按下的按键在处理器里面是用ASCII 码来保存的,并且它也会从最底层驱动一直上传到应用程序.应用程序是通过系统发来的WM_KEYDOWN 消息然后来获取按下的键值的.

相关文章推荐

解决点击关闭按钮,应用程序退出时,系统爆出“集合已修改,可能无法执行枚举操作”异常的相关思路

这两天在优化升级公司的一个业务系统时,更改了一下窗体关闭事件中的一句代码,由system.Enviromen.Exit(0)改为了Application.Exit();但是这时候问题就出现了,当点击系...

通过分析一个C程序的汇编指令执行过程,理解计算机的工作。

郑德伦 原创作品转载请注明出处 《Linux内核分析》MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 首先创建一个C程序的文件,m...

【Python】工作中自己用的一个程序,操作excel

工作中用到的程序,今天刚写出来,用于检测excel,里面有操作表格的部分代码,可供参考。 #author kingdz #create_time 2017.06.26 import xlr...

分析点击android桌面app图标启动应用程序的过程

Android应用程序的启动过程. 点击Launcher的界面app图标,启动应用程序. startActivity()过程
  • hehe26
  • hehe26
  • 2016-05-20 11:01
  • 3484

Android程序 类QQ通知常驻在Notification栏 点击Notification正确回调到之前已经放置在后台的Task中的对应Activity,而不是创建它的一个新实例

注意:本文大部分内容转载自:newcj 的博客 请尊重他人劳动成果! 今天在写完 “ android Notification 的使用 ”的时候,发现有几个问题,特别是设置Notificatio...
  • zz_mm
  • zz_mm
  • 2012-09-26 16:29
  • 12078

MFC基于对话框的程序添加菜单&点击菜单弹出一个新的对话框

基于对话框的应用程序默认是没有菜单的,如果我们想为它添加菜单, 可按以下方法来做: 1.在资源视图中制作菜单对象,并将ID设为IDR_MENU 具体方法是资源视图中右击-->Inse...

Android通知之通知栏点击通知后返回正在运行的程序,而不是一个新Activity

一般的写法,点击通知栏进入的Activity是一个新创建的Activity,而不是原先正在运行的Activity,这和我的想法是背道而驰的。当你点击返回按键退出这个Activity之后,发现,原先正在...

Android程序 类QQ通知常驻在Notification栏 点击Notification正确回调到之前已经放置在后台的Task中的对应Activity,而不是创建它的一个新实例

注意:本文大部分内容转载自:newcj 的博客 请尊重他人劳动成果! 今天在写完 “ android Notification 的使用 ”的时候,发现有几个问题,特别是设置Notificatio...

点击一个textView里的link导航至程序内可返回的自定义webView

1,在AppDelegate.h里定义一个  id currentViewController; 在AppDelegate.m里 @implementation UIApplication ...

基于对话框的应用程序,点击按钮打开一个网页

核心:使用Webbrowser控件 添加一个新的对话框,右键 Insert ActiveX control,选中 双击对话框生成响应的类(Web),并为webbrowser绑定成员变量(m_Web)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)