![2925218892dcd03f06da4a1eba2acd87.png](https://i-blog.csdnimg.cn/blog_migrate/4e89fe54e66c781fdaf9fde767fb62f2.jpeg)
- 早期 C 语言 (1972-1973) -> K&R C (1976-1979) -> ANSI C (1983-1989) -> ISO
- ANSI C -> C++ (1985-) # 融合 Simula 67 和 Ada 特色
- Cfront: C with class
- source: History of C
- 许多程序语言允许 function 和 data 一样在 function 內部定义,但 C 语言不允许这样的 nested function,换言之,C 语言所有的 function 在语法都是位于最顶层 (top-level)
- nested function 是编译器的扩展
- 「不允许 nested function」这件事简化了 C 编译器的设计
- 在 Pascal, Ada, Modula-2, PL/I, Algol-60 这些允许 nested function 的程序语言中,需要一个称为 static link 的机制来记录指向目前 function 的外层 function 的信息
- uplevel reference
补充说明:内嵌函数(Nested Function),所谓内嵌函数就是定义于另一个函数内部的函数.(GNU C++不支持内嵌函数) 内嵌函数名在它被定义的块中是局部有效的。
再论Function
![310fc3dd80a96c3cbe52d32d299214d0.png](https://i-blog.csdnimg.cn/blog_migrate/86a4e47b5efde5fa6afa1d1efe7574c2.jpeg)
- 数学定义的 Function
![bb5236110e3dc5eab66f8c6673f21c5e.png](https://i-blog.csdnimg.cn/blog_migrate/e43d156e8fd3487e71a1c73778d8c28c.jpeg)
- 在 C 语言中,“function” 其实是特定的形式,并非数学意义上的函数,而是隐含了一个状态到另一个状态的关联,以下摘自 Wikipedia C-- 词条:
- C is a poor choice for functional languages: it does not support tail recursion, accurate garbage collection or efficient exception handling.(下划线部分分别为:尾递归/垃圾回收/异常处理)
- C-- is a simpler, tightly-defined alternative to C which does support all of these things.
C-- 在 1997 年才提出,距离 C 语言出现整整过了 25 年,前者主要的功能是作为编译器的 IR (中间表示式),主要用于Glasgow Haskell Compiler (缩写 ghc,是 Microsoft Research 一项高影响力的开源源码)。关于GHC相关的知识,感兴趣的读者可自行搜索了解。
wiki链接地址:https://en.wikipedia.org/wiki/C--
Process 和 C 程序的关联
- 背景知识:
- IRQ (interrupt request)
- ISR (Interrupt Service Routines)
- IRQ mode
- MMIO v.s PMIO
- 以网卡的收报文流程为例:
封包进來 -> interrupt -> ISR -> IRQ mode -> 下图绿色的区块里面 (IORQ) 进行内存作(读取/写入数据)
![c14e85d6a19343629b9d52aedb74d598.png](https://i-blog.csdnimg.cn/blog_migrate/eef952aaaaaaeeedcecfd2ee5c96035f.jpeg)
- The Internals of “Hello World” Program
简单的hello World,背后的一些事情... ...
![955334650ff2c92f43e8677b04817a93.png](https://i-blog.csdnimg.cn/blog_migrate/541bc5add979757089498de66d8a56d6.jpeg)
下面是hello world程序背后涉及到的一些背景知识点(取自jserv老师的一篇关于hello world的PPT文档),头条无法插入ppt附件(读者可以评论留下邮箱索取),将以图片的形式插入,强烈推荐大家仔细阅读,这篇PPT文档要求读者有一定的操作系统以及计算机组成原理方面的基础,读者如果遇到不能理解的地方,欢迎留言交流探讨。
• Computer Architecture Review
![e7b1499eb87a1ffcd1af6405ba09a2c9.png](https://i-blog.csdnimg.cn/blog_migrate/5e9a759a46698d4a31a5bef35b1a50f7.jpeg)
![c6d25d8ea704c8ccd9b479792db20fce.png](https://i-blog.csdnimg.cn/blog_migrate/d7b59eafa1a45af95625f62f94b3abf6.jpeg)
![3f86154d06311298e0f876bd72e5aebc.png](https://i-blog.csdnimg.cn/blog_migrate/ed6be587aa223f86eb1b332d73386d28.jpeg)
![cfb6ff2b71a06c30c278a03283ea8bfb.png](https://i-blog.csdnimg.cn/blog_migrate/70d52e30c1373c0449a224673d8f3481.jpeg)
![efac9522443dbfdc20df1f49a1bf9379.png](https://i-blog.csdnimg.cn/blog_migrate/c96888bc661421c578db63cb8b25ad13.jpeg)
![548d49f0a7cc834f811820977281795a.png](https://i-blog.csdnimg.cn/blog_migrate/d01989b18828190b4c2fa4d91bc70565.jpeg)
![dfc8c4273a632ed4be0f06672aa34693.png](https://i-blog.csdnimg.cn/blog_migrate/f404c26abcf0bb2c6d83e08158b16b23.jpeg)
![55e0d2a3365fbeeb3b88b2adce1c0073.png](https://i-blog.csdnimg.cn/blog_migrate/46eb0f3697543384ad707c5e558390f6.jpeg)
![7554b800797d4902ec548a49b8364873.png](https://i-blog.csdnimg.cn/blog_migrate/92b334b14d2fc7f5f4531b15d51072de.jpeg)
• Static Linking
Compilation & Linking
![777e2c89d15f67cd17dea0806df7c153.png](https://i-blog.csdnimg.cn/blog_migrate/fa88946f6f60cd6ba32767eeddde7c3f.jpeg)
Object File Format
![3ba1c97f97ee9d64d8a0d598a695caa6.png](https://i-blog.csdnimg.cn/blog_migrate/96f2677da6adc95b1d762794e13ccedb.jpeg)
![b50e2e5c08e28e3bd68cc684dc42436f.png](https://i-blog.csdnimg.cn/blog_migrate/bb56a20f015e102d9fc4b243f9c1c2ac.jpeg)
![dc41c79a53899dc5c76313a7e25210c4.png](https://i-blog.csdnimg.cn/blog_migrate/2af25b2bc4446870333496f7474cbbbb.jpeg)
![fa0b1cb9b2890486fdf55735af1584dd.png](https://i-blog.csdnimg.cn/blog_migrate/c86a5c989b4443bae0b25003c575a47b.jpeg)
![b93dbf7ef6bdbad317c1f1f95e3991e9.png](https://i-blog.csdnimg.cn/blog_migrate/f0f7817d3d55a5b09c984033d9fa3549.jpeg)
![b895c694ac5e06178871e85a67889c98.png](https://i-blog.csdnimg.cn/blog_migrate/eb505c3836e0e1ff78e85f51792f1122.jpeg)
![81500d3d862a9e837f87a57778f89023.png](https://i-blog.csdnimg.cn/blog_migrate/a600c2babc795ec0f1457c65eaef4b3f.jpeg)
![8dea0c78245f0642f183041eabd7da99.png](https://i-blog.csdnimg.cn/blog_migrate/7ba6c9c5b590bc0f74ed8ad35b3bc7fe.jpeg)
Static Linking
![3a9df4cd9cc0b40d2178a498d66bca5e.png](https://i-blog.csdnimg.cn/blog_migrate/1dd864fc2717fd74991174455c38d28d.jpeg)
![fd4449c6fe3ebadb10f8d5801d7b81a3.png](https://i-blog.csdnimg.cn/blog_migrate/b9838543cf8c2798cc004fcfa75ca585.jpeg)
![4287cf34d3e1cfbb08156dec58398227.png](https://i-blog.csdnimg.cn/blog_migrate/38248820697a019970521f79f5560f4d.jpeg)
![280cb5de10f286cdd86bf0da5ff350db.png](https://i-blog.csdnimg.cn/blog_migrate/fec5d9e35e87f3717d6a644c40399e6b.jpeg)
![15ec1c45678061d93c3276033a0c9598.png](https://i-blog.csdnimg.cn/blog_migrate/650089726d445a21d63c5229bc58d3e0.jpeg)
![0ec2ff7cef63d1d8dcb80b584c7efb28.png](https://i-blog.csdnimg.cn/blog_migrate/f786a0e68d12b89139f5833939b19c0e.jpeg)
![9432519092612b0acf9b64c69a3bacbd.png](https://i-blog.csdnimg.cn/blog_migrate/e72a9997d70cc331ec24d15c059ce8d8.jpeg)
![a741af00ff268846b2898df6af7311f0.png](https://i-blog.csdnimg.cn/blog_migrate/31c2c949d8fb04109773e85a10c2ded4.jpeg)
![4eb3a794f138276988bfa304cf76757d.png](https://i-blog.csdnimg.cn/blog_migrate/56fb7e205c005fa67985b89ae6bcc250.jpeg)
• Loading & Dynamic Linking
Executable File Loading & Process
Dynamic Linking
• Memory
• System Call
后面几个章节的PPT图片暂时不贴出来,否则会造成文章过长,有需要的话评论留下邮箱,我会将ppt文档发给您。
![5094198d3885fdce309129c18e901141.png](https://i-blog.csdnimg.cn/blog_migrate/2eb6076e0d7c4e2ab4e24c271f975843.jpeg)
- instructions: 自 object file (ELF) 映射 (map) 到 process 的 program code (机器码)
- static data: 静态初始化的变量
- BSS: 全名已 不可考,一般认定为 "Block Started by Symbol”,未初始化的变量或数据可用 size 指令來观察
- Heap 或 data segment: 执行期间才能动态配置的空间sbrk 系统调用 (sbrk = set break)malloc/free 实际的实现通过 sbrk 系统调用
ELF segment & section
一个 segment 包含若干个 section
$ sudo cat /proc/1/maps | less55cff6602000-55cff678b000 rw-p [heap]7fff7e13f000-7fff7e160000 rw-p [stack]
program loader
XIP: execution in place
关于链接/加载相关,强烈推荐书籍
![817c1013a291b3394bf4c9902a82ea2a.png](https://i-blog.csdnimg.cn/blog_migrate/e9b1b30894ee852258ff6f0f87eaff6b.jpeg)