- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十二章APO编程语言.
第十二章 APO编程语言
这章是基本的、重要的;我不得不反复、仔细、认真的修改,即使啰嗦、也力求能完整说明。系统安全是随时要考虑到的,除了用户指令须是安全的、用户进程只能走在自己声明的变量空间上外;对文件操作也是要设置一系列权限。对文件的操作权限,我们是参照UNIX、LIUNX;在实现上,做了一些简并和优化。APO操作系统:包括内核方法库,用户的API方法库,公共通用方法库,日志、文件、数据库、网络等服务进程,实时进程支持,动态优先级的进程调度,一个进程最多64K个线程的线程优先级调度,信号、消息处理,GPU的4D图形处理、显示,音频处理等等;APO的指令代码量不会到4KW,大约就是4千条指令吧。LINUX有的功能、APO都有,但在速度上要快得多,一些项目甚至要比LINUX快近百万倍。
一、变量空间说明
为了系统安全,用户是没法知道其变量空间在本地内存中的实际地址的;也不能使用指针来指向内存的实际地址。就类似,我们不知道地球挂在相对宇宙中心的什么位置一样?宇宙中心在那?我们是无法知道的。但在自己声明的变量空间上,可以使用寄存器作为相对偏移指针;如D.A1.A2..Ai.X.R1L.W,大对象空间D中的成员变量A1子空间中的成员变量A2子空间中的.。。。。成员变量Ai子空间中的成员变量X子空间中的以寄存器R1L为指针的字变量位置。类似,银河系中的地球的中国的广西省的以寄存器R1L为县名指针的具体县位置。变量空间是靠我们声明的,你说多大就是多大了;是否能成功,那要看系统的运行情况。如果你声明300GB的变量空间,那么系统本地内存最多只是128GB的空间,显然、你会得到一个错误返回。对象的空间基本单位是行E,理论上对象空间最大可以声明到4GE = 32GW = 128GB。而对象空间下、或许有一大堆有层次、树状结构的成员变量,它们的大小要用32位表示、相对根对象的偏移也要用到32位来表示。对象空间下的某个成员变量可能是用位、或字符、或字、或双字来描述的,那么表示空间属性的行内编码,位需要8位、字符需要4位、字需要3位。所以,描述一个变量空间需要32位的大小、32位的偏移、10位的根对象号(间接表示在本地内存中的位置)、可能8位的行编码、可能16位的立即数赋值或1到2个的6位寄存器描述等等。所以,操作一个变量的指令码需要3W大小、耗时3ns。
1、空间分割
变量空间分割成多个成员变量子空间,这是常见的;也可以说是合成吧,我们通常在一个表、或C语言结构、或数组、或向量、或集合、或类的属性表、或类的方法表中声明多个变量;在成员变量中又可以再分割下去,那要看需要。无论怎样,你只要给变量名字、声明其空间大小;在某个根对象中适合的位置声明;编译器总是能知道你的变量在根对象空间中的相对位置和大小;但编译器也不知道根对象在本地内存空间中的具体位置。一个应用程序最多可以声明992个根对象空间;所有的变量空间位置都是相对于某个根对象空间的。类方法表lf_tab根对象有32个,0是本类方法表、1-31是程序引用的公共、或自己的方法类库DLL;API公共方法库是公开的、固定的、是无须安装就可使用的。线程类方法表thread_lf_tab有128个、为线程组run()入口和长度。我们声明的静态根对象属性表dx_tab(Di)有64个;而在代码中声明的、但动态分配内存空间的动态根对象可以有768个。
2、静态变量空间
在进程开始运行时,申请内存分配的、由编译器指定的静态根对象空间;只有在进程完全退出时,才会释放掉。如果、你的变量是挂在某个静态根对象Di空间下的成员变量,那就是静态变量。要注意到、声明的静态变量空间在程序运行期间一直占据部分内存,直到程序退出时,才由系统释放。
3、动态变量空间
在程序的方法中、声明的、和动态分配内存new()的变量是动态变量,属于动态根对象。动态根对象同样可以声明成复杂的、有层次树状结构的、有一大堆成员变量的结构空间。对于动态变量、当它们的引用计数为0时,会自动被系统回收、释放掉它们的空间。
4、变量的操作
在代码中都是用变量名来操作变量的空间,一个变量空间中的部分内容拷贝到另一个变量空间中去,是由系统API中的COPY方法来完成的。变量的操作主要有:对变量空间中某个位置的内容进行寄存器、或16位立即数、或其中的一位的赋值;或某个位置的内容拷贝到某个寄存器中;或对变量空间中某个位置的位进行测试转移。某个位置有时,也可以用寄存器做指针。
5、变量的编译说明
在用户程序中,不管是动态、静态声明的对象,或字符串常量;它们在编译器的符号表中都有对应的32位大小、32位相对根对象的偏移地址、所属的10位根对象号、空间性质:行内寻址(位8位、字符4位、字3位、行0位)项目。如下:BU
原创力文档


文档评论(0)