上一篇分析了c语言的函数调用栈情况,知道了c语言的函数调用机制后,我们来看一下,linux0.11中起动部分的代码是如何从汇编跳入c语言函数的.在LINUX 0.11中的head.s文件中会看到如下一段代码(linux0.11的启动分析部分会在另一部分中再分析,由于此文仅涉及c与汇编代码的问题,). after_page_tables: pushl $ # These are the parameters to main :-) pushl $ pushl $ pushl $L6 # retur…
Linux-0.11内存管理模块是源码中比較难以理解的部分,如今把笔者个人的理解发表 先发Linux-0.11内核内存管理get_free_page()函数分析 有时间再写其它函数或者文件的:) /* *Author : DavidLin *Date : 2014-11-11pm *Email : linpeng1577@163.com or linpeng1577@gmail.com *world : the city of SZ, in China *Ver …
一个完整可用的操作系统主要由 4 部分组成:硬件.操作系统内核.操作系统服务和用户应用程序,如下图所示: 用户应用程序是指那些字处理程序. Internet 浏览器程序或用户自行编制的各种应用程序: 操作系统服务程序是指那些向用户所提供的服务被看作是操作系统的部分功能的程序. 在 Linux 操作系统上,这些程序包括 X 窗口系统. shell 命令解释系统以及那些内核编程接口等系统程序:操作系统内核程序即是本书所感兴趣的部分,它主要用于对硬件资源的抽象和访问调度. Linux 内核的主要用途就…
前言 Makefile对于从来没有接触过的人来说是相当别扭的(比如我),但它确实又是非常重要的,它描述了一个Image是如何形成的,理解它也许并不能帮我解决实际问题,而且编写Makefile的工作也许根本不需要我们来做,但是,学习它能给我们一个更广阔的视角,说不定就能为某些难题.bug提供解决思路.这篇文章也只是对Makefile的初探,待到对Makefile有更深刻的理解之后,我会对这篇文章进行更新~ Tips 在查看Makefile源码之前最好熟悉gas常用的命令参数 as A B A -a…
?21,# head.s contains the 32-bit startup code.# head.s 是32位的启动代码 # Two L3 task multitasking. The code of tasks are in kernel area,# 有两个L3(Level 3,即第三特权级,IA32提供给用户0-3,四个特权级,但是Linux0.11只使用了# 0和3这两个特权级,表示用户态程序和内核态程序,内核-kernel)的多任务 # just like the Li…
参考文章:https://coderwall.com/p/u4w9ra/implementing-signals-in-c-11 最近在完成C++大作业时,碰到了监听者模式的需求. 尽管C++下也可以通过声明IObserver这样的接口,做继承,然后实现类似Java中的监听者模式. 但是这种方法并不是最适合C++的.通过利用C++11中的函数对象和RAII,我们可以实现一个更符合C++国情的监听者模式. 代码如下: /* Signal class for implementing event.…