程序如何运行

编译

  • 预处理,C/C++的预处理很强大,我们看到的这些宏包含太多逻辑了,而且完全不占用CPU资源
  • 编译为目标文件
  • 连接所有目标文件生成可执行文件

执行

  • ELF可执行文件,是按照某种格式来存放指令和数据
  • 16位系统:将二进制数据推入CS寄存器,将会被当作CPU指令来执行 MOV DST, SRC
  • 用户态下指令已经被操作系统接管,处于保护模式下。而且内存也全部是虚拟地址,不会出现危险

操作系统

  • 进程调度,每个进程不是连续执行的,而是会先放到可运行队列,再分配CPU时间片去执行程序指令
  • 对硬件资源的访问是由操作系统完成的,比如读写磁盘,读写网卡等等,应用程序调用操作系统提供的函数来实现相应功能,比如我们说send/recv本质上是在与内核通信,而且不是网卡。读文件也不是去读磁盘,而是告诉操作系统,然后操作系统再去操作硬件

可以看Linux操作系统内核介绍之类的书籍