程序为什么非得装入内存再执行?
“远古时期”,写程序是在纸带上打孔,计算机从纸带读指令,读一个指令执行一个指令,速度非常慢。
“近代”, 程序为什么非得装入内存再执行? 我们开门见山直接说原因:
原因1:
首先是因为程序中有循环,循环体指令会被反复的读取。
假设有4条指令,需要循环执行1000次 ,“内存读4000次” 时间加上从外存读4条指令到内存的时间,会比外存读4000次节省大量的时间。
原因2:
现代计算机的外部存储(比如磁盘),一次I/O会读入一大块数据到内存,即一次读入n条指令执行,执行n条指令只需要一次I/O,而不需要n次耗时的I/O操作。
PS:理解了上面说的原因,下面的文字就不用看了。如果不是特别理解,就接着往下看。
我们举例说明“原因1”:
假如一个程序有2条顺序指令,8条循环执行的指令,循环执行的指令执行100次,从纸带读1条指令要1秒,从内存读一条指令需要0.05秒,执行一条指令0.01秒。
问1:两种方式总的执行时间各是多少?
第1种方式:
总时间
= 纸带读(2+8*100)条指令并执行指令时间
= 802 *(1+0.01)= 810.02 秒
第2种方式:
总时间
=10条指令读入内存时间 + 内存读(2+8*100)条指令并执行指令时间
=(2+8)*1 + 802 *(0.05+0.01)=50.12
从上面的计算可以看出,第1中方式慢的本质就是循环导致了过多的I/O,且I/O太慢。
问2:如果10条指令都是顺序执行的指令,两种方式总的执行时间各是多少?
第1种方式:
总时间
= 纸带读10条指令并执行指令时间
= 10 *(1+0.01)=10.1秒
第2种方式:
总时间
=10条指令读入内存时间 + 内存读10条指令并执行指令时间
=(2+8)*1 + 10 *(0.05+0.01)=10.6
从问题2看出,如果指令从外存只能一次读一条,且都是非循环指令,读入内存再执行的方式反而更费时。
程序为什么非得装入内存再执行?相关推荐
- Thread:主线程等待子线程执行完毕再执行解决办法
线程从启动到执行完毕,一般会有一些耗时操作,并不能像一般的程序语句,就能立马结束.如下代码: package com.xxx.async; public class WaitThreadDone {p ...
- 【OS学习笔记】十 实模式:实现一个程序加载器-程序加载器如何将用户程序加载到内存并执行
上一篇文章学习了以下内容: 用一种不同的分段方法,从另一个不同的的角度理解处理器的分段内存访问机制 使用循环和条件转移指令来优化主引导扇区代码 点击链接查看上一篇文章:点击链接查看 对于主引导扇区部分 ...
- 服务器如何停止程序运行,如何让程序暂停几秒再执行
编程方面: 可以用邀月提供的多线程方法,以Thread.Sleep(3000 还有一种方法更为简单,就是直接在代码中插入Thread.Sleep(3000),来实现暂停效果,但是这样你会感觉你的用户界 ...
- os引导程序boot从扇区拷贝os加载程序loader文件到内存(boot copy kernel to mem in the same method)
[0]README 0.1) 本代码旨在演示 在boot 代码中,如何 通过 loader文件所在根目录条目 找出该文件的 在 软盘所有全局扇区号(簇号),并执行内存中的 loader 代码: 0.2 ...
- 第13章 程序的动态加载和执行(三,核心代码)
这个核心代码也是本书唯一的一个核心代码,把这个读懂了,本书基本上通了,这个核心代码不难,只是前面知识的综合应用而已,所以用一到两个星期把这个三个程序读熟再进行下面的四章. 怎么样才算是读通了一个代码: ...
- iOS 开发中,单款应用程序的最大可用内存是多少?
9 个回答 7赞同 反对,不会显示你的姓名 张光宇,none snow.dingc.孔庆立 等人赞同 如果你想让用户 在尽量多的iOS设备上得到比较稳定的体验, 实用过程中不Crash, 不因为GC而 ...
- X86汇编语言从实模式到保护模式13:保护模式程序的动态加载和执行
目录 1. 引入保护模式对程序加载与执行的影响 1.1 对应用程序的影响 1.2 对操作系统的影响 1.3 本章程序总体结构 2. MBR加载内核过程分析 2.1 内核头部段分析 2.1.1 内核总长 ...
- 程序运行时的内存空间分布
本文转载自http://blog.csdn.net/ljianhui/article/details/21666327 谢谢原文作者的辛勤付出. 我们在写程序时,既有程序的逻辑代码,也有在程序中定义的 ...
- java冰雹数10_生成的新的数字再执行同样的动作, 循环往复.
生成的新的数字再执行同样的动作, 循环往复. 声明 可能本文章会有错误, 希望各位读者看到后, 记得回复留言, 提醒我, 以免误人子弟. 本人菜鸡, 还望各位大佬手下留情. 题目: 冰雹数 任意给定一 ...
最新文章
- 微型计算机的分类有,微型计算机的分类
- 数据聚合Spring Data MongoDB:嵌套结果
- SpringMvc-HandlerMapping/RequestCondition
- php底层开发框架, yaf,swoole,hiphop
- C#获得SQLServer服务器名、数据库名、表名、以及字段名
- c语言高精度算法阶乘_学了这么久的C语言,原来可以这样解决算法问题...
- 同时删除多个 Word 文档空白行
- c语言写成汇编语言程序 冒泡排序,MIPS汇编程序设计——冒泡排序
- 第6章 访问权限控制
- 最简单的人脸识别系统搭建
- F1 Delta Time 将停止运营,玩家的奖励如何?
- 关于javaBean运行后出现Name was not previously introduced as per JSP.5.3的解决方法
- jquery mobile外部js无法载入问题
- pg批量插入_postgresql大批量数据导入方法
- 普元 AppServer 部署时页面提示部署失败,后台报错:Unable to load class org.apache.cxf.ws.policy.AssertionBuilder
- [附源码]Nodejs计算机毕业设计基于JAVA的校园电车租赁系统Express(程序+LW)
- Jetty修改默认端口
- SQL掌握:添加、修改、删除、查询4个句式
- 分享一些写博客的实用工具
- 大公司 or 小公司,你要怎么选?
热门文章
- JS, CSS 文件压缩与反压缩工具
- 在CentOS6中安装Docker(新服务器不推荐)
- c语言缩写一个人的名字,用C语言输入一个人的英文名字统计个数输出
- 交叉驰豫的影响因素_墨点对uv打印机印刷质量影响
- ps2019布尔运算快捷键_设计师不会告诉你的ps布尔运算,你学会了吗?
- Python中的split()和rsplit()的使用
- 带负荷测试要求二次最小电流_差动保护带负荷测试
- android滚动条布局平分,让你的布局滚动起来—ScrollView
- java二叉树求权值_百度笔试题目:二叉树路径权值和【转】
- ftp ---- 本地用户登录(实例配置1:)