您的位置:首页 > 运维架构 > Linux

linux内核学习初步

2014-09-14 16:49 155 查看
这是嵌入式系统应用黄爱爱老师讲课的内容,作为linux内核学习的一部分,用回忆的方式进行整理



1、 物理地址和虚拟地址

什么是物理地址?什么又是虚拟地址?

在内存管理这一块涉及到了这些内容和知识,举个例子,比如说




以上是我在上课时老师讲的一个例子,比较生动形象。另外拿32位MCU来说,它可以访问的内存地址是2的32次方,即4G,也就是说有4G的虚拟地址可以供访问和创建,而物理地址只有512MB,那么是不是说4G的虚拟地址都可以用起来填满512MB的空间?不是这样的,通常来讲,内核会采取所用即所取的方法来管理存储空间,比如当用到某个数据时才开始访问4G存储空间。

又,这4G的虚拟地址是有权限的,不是说每个程序都可以访问得到这4G的内存空间,上节课讲到上层应用程序的状态分为内核态和应用态,应用态对于虚拟地址的访问是比较小的,不到4G,而内核态则可以达到4G。

而内核态和应用态之间的切换靠的是系统调用(System-call),系统调用最终还是要靠一个传递消息的机制到底层硬件上去访问硬件,就是fork()函数

说一说fork()函数,进程是怎么来的?就是通过上一级的进程产生的,上一级的进程又通过上上一级的进程产生,源进程叫做父进程,而进程的源头就是fork()函数产生的。

2、 进程和线程

什么是进程?什么又是线程?

还是通过一个例子来说一说,比如讲课,老师要有哪些资源,教室,时间,课件








那么对于讲课这一个过程,我们叫做一个进程,进程也可以叫做一个任务;linux是多用户多任务的操作系统,其实也是多用户多进程的OS;

那么比如说有3个老师轮流给这个课程的学生上课,那么这每个老师上课就可以看成是一个线程。



3、举个例子

有一个7000人的映射,那么我要找到ID(11913102)是其中一个的方法

1、应该想到直接映射,即遍历所有的数据;循环次数是7000

2、采取页表机制,比如一页上的存储空间只有4KB,虚拟出另外一张表,上面的信息只挑出一些关键性的,比如年级、班级信息

这样循环的次数大大减少;这叫做一级映射;

3、当这个页表的信息再一次不同时,循环次数又会减少,这叫做二级映射。





4、进程和程序的区别

多个进程可以并行执行一个程序,进程是一个实例化,同样,人也是一个实例化的对象;所以进程是具有生命周期的;

当多个进程都运行的时候,他们的存储机制其实是依靠一个庞大的结构体建立的,这个结构体内部也包含了更多的结构体。



5、一般来讲,都是先有的虚拟地址,再去分配物理地址,

而作为外设比如USB接口设备接上电脑,这是先分配物理地址,再去分配虚拟地址。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: