优快云上的疑问??

小弟有个猜想:
    操作系统从磁盘上加载应用程序文件(以DOS来说是*.exe)到内存(当然从哪个扇区开始,哪里结束.这是DOS文件系统的工作)

    操作系统为应用程序分配内存,
    把程序载入内存后,操作系统执行一条段间调用
         CALL (地址)
    就可以运行应用程序.
    本质上说,对于操作系统而言,应用程序就是不驻留内存(任务完成就释放内存)的子程序罢了.

以上就是小弟的模型.
    如果这个模型是正确的,小弟本人有些疑点:
    1,应用程序加入内存的地址并不是一定的(操作系统已占用了内存),那么CALL语句的段地址由操作系统分配内存时可以得到;但与同一程序中的子程序不同,入口地址偏移是未知的,如何得到?
    2,应用程序用到的堆栈,是包含在本身内的,以DOS文件系统来说,就是包含在*.exe中的,只要应用程序本身修改DS,SS,ES就可以使用包含在自身的各段,是不是这样呢?
    
    小弟用16进制编辑器查看*.exe文件,发现文件头都有
    4d5a33000200000020000000ffff000008002950200001001e00000001
    4d5a13000200000020000000ffff000008009ba4000001001e00000001
    4d5a03000200000020000000ffff00000000b4a4000000001e00000001

  改变堆栈段的长短,重叠数据段和代码段,都会令这个文件头有所改变.
  这段数据是不是DOS加载程序时需要用到的信息呢?
  前面疑点(1)中的入口偏移可以由汇编程序在汇编时算出,那么是不是放在这里呢?



不是小弟狂妄,小弟想做个操作系统,所以对这些问题契而不舍.
但小弟还极菜,各位大侠多指教,嘿嘿:>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值