当前位置:  技术问答>linux和unix

一个程序如何被操作系统调用分配然后执行的呢?

    来源: 互联网  发布时间:2016-12-06

    本文导语:    一个程序如何被操作系统调用分配然后执行的呢? 例如一个程序,放在外存中(如硬盘),然后我点击它,就可以运行了。 那么,这个程序在硬盘上时,它有没有逻辑地址,是不是这个程序中的每条指令都有一个...

  一个程序如何被操作系统调用分配然后执行的呢?
例如一个程序,放在外存中(如硬盘),然后我点击它,就可以运行了。
那么,这个程序在硬盘上时,它有没有逻辑地址,是不是这个程序中的每条指令都有一个逻辑地址,
这个逻辑地址是不是 和它所在的硬盘的物理地址相关呢?,即,放在硬盘的不同位置 这个程序的逻辑地址不一样?
  
  书本中说 逻辑地址就是机器指令中使用的地址,80x86指令的地址字长度为48位,其中46位用于寻址,因此80x86
的逻辑地址地址空间最大可达64TB。为了支持多进程操作系统中并发进程的运行和实现存储保护,80x86存储管理机制
把64TB 的逻辑地址空间分成性质不同的两部分,全局地址空间和局部地址空间,每个地址空间最大32TB。

  那么我的源程序通过编译器编译完后,生成的可执行程序中,每条指令都有逻辑地址吗?,是属于64TB 中的吗
  那每次编译不同的源程序,成才的可执行程序的逻辑地址起始地址一不一样??,即是不是都从0开始?
 
 

|
逻辑地址不同于真实的物理地址,因为逻辑地址是编译生成可执行文件的时候赋予的地址。

当处于硬盘上的代码被放入内存并且构建起来了进程映像的时候,存在虚拟内存的管理和映射,通过MMU将代码中的逻辑地址映射到真正的物理地址上去。

编译器的链接器赋予程序地址的时候,一般是不会以0开始的,一般都以0x888cccc之类的形式开始,从0开始是低地址,是属于内核或者操作系统的,一般。

对啊,指令都需要地址的,这是毋庸置疑的,只是指令是以只读的方式存在于内存的页面之中的,而数据段则是可读可写,而且,这些的物理地址都是经过了映射的。

|
操作系统、计算机原理及《程序员的自我修养——链接、装载与库》等等书籍可以解答楼主的问题。
程序存在硬盘时是静态的,与其它普通文件没什么本质区别。
当它被加载到内存,就是动态的,即可执行的。

至于装载器加载可执行文件,在操作系统中运行等等详细的细节已经忘了,帮不上忙。

|
运行程序时,系统会生成一个新的进程,然后把程序的代码段、数据段读入,分别放入新进程的地址空间中,并分配不同的权限,比如代码段为可读可运行权限,数据段读写权限,然后进程从代码段的入口开始运行

|
需要加载到内存才运行的啦!

    
 
 

您可能感兴趣的文章:

  • 在Python中使用SWIG调用C和C++程序
  • 请问从一个java程序中如何调用另一java程序,并控制可以其状态(最小化、最大化、结束程序),还有怎样知道那个被调用的程序结束。
  • 我自己写了一个一个程序,文件名叫test。。怎么能够像调用系统命令那样子去调用我这个命令呢。在任何地方输入test就能执行这个程序。
  • SHELL 编程时要求用分模块编写各应用程序,然后由主菜单程序调用各子程序模块。主菜单如何调用子程序的呢?
  • unix程序中调用其他程序的问题
  • linux 里怎么在程序里调用其他程序?
  • 程序调用脚本,脚本启动另一个程序,如何让原始程序彻底释放资源?
  • C程序中调用Shell程序
  • 如何让java调用外部程序,并且不等待外部程序执行完毕,直接返回?
  • 急!请问有分析java程序性能瓶颈的工具吗?例如,统计 java 程序中函数调用次数?
  • Linux 编程:在程序中调用另外的程序,让它在后台工作。
  • [100分]如何在GTK下编写的程序中调用shell下的批处理程序[高手进]
  • 如何通过java程序调用vb程序
  • AIX 5.3下调用windows 2000上的exe程序,且AIX下需要得到windows下程序执行的返回结果
  • 内核空间能否调用用户空间程序?
  • 应用程序如何调用sd卡
  • 如何查看子进程调用其它程序后的程序段与数据段地址
  • go和python调用其它程序并得到程序输出
  • 请教一下在驱动里怎么调用应用程序
  • 请教高手,如何在java中调用其他应用程序(该程序主要进行数据库操作)
  • 怎么在应用程序中调用一个脚本??
  • c程序对内存分配怎么管理?
  • 求一个ip地址池分配地址的小程序。谢谢了
  • 如何在java程序中获得拨号上网分配的动态IP?
  • 那位高人有任务分配问题的禁忌搜索算法、模拟退火算法的算法实现程序啊
  • 求助:关于双核程序运行资源分配的问题,一大一小啊现在。。。
  • 嵌入式linux的应用程序分配内存地址问题
  • 探讨:程序在内存中的分配(常量,局部变量,全局变量,程序代码)问题
  • 高分求救!我在uclinux上运行应用程序时出现内存分配错误,不知如何解决,解决者高分!!
  • 如果释放动态内存多于当初分配的数目,积少成多会造成程序崩溃吗?
  • 在我的java程序中,我从数据库中得到一批数据,不能确定是多少个,我要把它保存到我的java数组中,可是怎样才能向C++中的数组一样可以自由分配空间,在java中我必需预先指定大小,不会一定要用java中的那个可改变数组大小的类吧?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux下通过crond实现自动执行程序
  • 怎么在一个程序的执行过程中中止执行它?比如一个按钮的响应程序中,执行一半中止??20分!!!
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • 如何在程序中执行另外一个程序,并且当前进程依然执行?
  • 先 fork 子进程然后 execl 另一个可执行程序, 如何得到这个可执行程序结束的返回值?
  • 怎么在java程序中执行系统命令或其他可执行程序(像批处理一样)?
  • 为什么执行完execlp函数后程序就退出了,怎样才能让程序继续执行后面的代码
  • 为什么在图形界面下执行一个可执行程序,老是说找不到该程序,而在字符界面下却ok?
  • 在一个终端运行一个执行时间很长的程序中如何让这个程序切换到后台执行?
  • 请教可执行程序的执行问题
  • 执行当前目录下可执行程序时前面必须要加上./才可以,如何解决?
  • 如何在LINUX中在系统启动后自动执行一个执行一个程序?
  • shell 编程 执行shell新建多个终端 并执行程序
  • 直到线程执行完后,才让程序继续执行下去,怎么实现??
  • 在C程序里面执行unix的命令的时候怎么获取执行的结果了?
  • 可执行程序在开发板上的执行
  • 很菜的问题——Linux(RedHat8)下的齿轮图标程序如何执行,是什么shell命令可以执行它?
  • QT的应用程序中如何获取程序执行的路径?
  • .net/c#/asp.net iis7站长之家
  • 怎么让一个程序在后台运行而不影响其他的程序的执行?
  • 为什么执行linux程序有的要在程序名前加./
  • 重装服务器后IIS网站错误(应用程序中的服务器错误)
  • 为什么我在java程序里启动的一个程序在java程序关闭后,该程序的所有进程都关掉了
  • windows server2008上PowerBuilder程序系统错误解决方法
  • Linux 编程怎么样在程序开启一个程序,和关闭一个程序?
  • c语言判断某一年是否为闰年的各种实现程序代码
  • Linux下的程序是在内存中运行的吗?为什么在程序运行的时候可以删除程序文件?
  • 程序员的八种级别,你属于哪一级?
  • 我的程序是用c写的gtk+程序,有个函数的参数要传给它图片的文件名,但是图片和原程序不在同一目录下怎么办?怎么在程序里指定文件的路径
  • 在docker容器中通过apt-get安装新的程序
  • 为什么linux下的C++程序这么少见? 请问那里有linux下的C++程序?什么类型的程序都可以.


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3