随笔分类 -  操作系统

摘要:前文主要讲了我们的程序是通过虚拟地址进行内存访问的,那么操作系统是如何实现了虚拟地址到实际物理地址的转换,又是如何对有限的物理内存进行管理,才能让多个进程共同在有限的内存里跑起来的呢?总的来说,系统要做的工作包括:监控物理内存的使用情况、在程序需要更多内存时进行内存分配、把不同进程的地址空间映射到物理内存的不同区域、动态地把程序运行需要的资源移进内存或把暂时不需要的资源移出内存以腾出空间,接下来将对Linux是通过怎样的机制完成这些工作做一个简要的介绍。1、分页和页表首先,分页的概念相信很多人都不陌生,我这里想说的是“分”的思想,学习计算机两年多,我最大的感受是计算机就是在利用有限的资源干.. 阅读全文
posted @ 2013-05-21 23:09 Benjamin-T 阅读(2283) 评论(4) 推荐(0) 编辑
摘要:关于内存,最直观的理解可以将其想象成一个个格子,每个格子由一个地址标记出来并且存了一个字节的数据,对于32位的机器,可以有2^32个地址,也就是理论上可以存4GB的数据(实际的机器不一定是4G的物理内存)。的确,对于程序员而言这样的理解已经足以满足我们编写程序的要求了,而内存实际的物理模型也是这个样子的。但是,对于系统而言,这样简单的模型是不够的,因为正常情况下系统中都会运行着多个程序,如果这些程序都可以直接对任意一个内存地址进行操作,那么一个程序就很有可能直接的修改了另外一个程序保存在内存中的数据,这种情况下会发生什么,不好说,但肯定会悲剧。所以操作系统必须实现一些机制,来保证各个进程可.. 阅读全文
posted @ 2013-05-14 09:19 Benjamin-T 阅读(2206) 评论(5) 推荐(4) 编辑
摘要:在前文我们大致了解了程序中如何使用系统调用实现我们想要的进程管理方式,在本文中我们将要看看linux系统内核又是如何实现进程的管理的。正如在概述中讲的,操作系统本身也只是一个计算机程序,只要是程序,就会有数据结构和算法,就同样会利用到内存空间甚至磁盘空间,在往下看之前,读者不妨先根据自己的知识思考一下可以用什么样的方式来实现,说不定就搞出了一个新的系统哦~1、进程的表示方式 linux将一个个进程抽象为一个个任务,并定义了一个结构体task_struct用于表示一个任务,对于每一个进程,在其生命周期里都会有一个相应task_struct类型的进程描述符存在于内存中,保存了内核用于管理进程所.. 阅读全文
posted @ 2013-05-09 15:56 Benjamin-T 阅读(1982) 评论(3) 推荐(0) 编辑
摘要:在前文完成了概述之后,本文就要开始进入戏肉了,之前我们将操作系统的内核结构分成了三个模块,现在就先从进程管理模块来开始深入探讨一下。1、进程间的关系我们知道一个Linux系统里同时运行着大量的进程,当你在shell终端里输入ps -ef命令时,你会看到像下面这样一长串的东西,有很多我就截了一部分。这些进程之间是什么关系呢?首先,我们从最基本的父子关系说起,我们知道在一个程序里只要调用fork函数就可以创建一个新的进程,在这种情况下,调用fork函数的就是父进程,新创建的进程就是子进程,而子进程又可以创建子进程,这样层层往下延伸,就构成了一棵进程树。然后看上图,每个进程都对应了一个PID和一个P 阅读全文
posted @ 2013-05-06 15:00 Benjamin-T 阅读(1971) 评论(0) 推荐(0) 编辑
摘要:通过Linux理解操作系统(一):概述用了那么多年电脑,操作系统从WinXP,Vista, 再到Win7, 然后是现在用的Ubuntu,这么长的时间里,一直没有搞明白这操作系统是个什么东西,为什么这么神奇,只要点一点,按一按,那些一块一块的硬件就可以完成我们的工作。直到学了操作系统这门课程,才开始有点朦朦胧胧的理解,最近又看了一些linux系统设计的资料,觉得有些领悟,所以写出来跟大家分享一下。先声明,本人不是linux技术极客,所以本文不会讲一些很酷的linux使用技术,也不会讲一些很深入的linux内核分析,这些都有相应的书籍和资料可以学习,比如鸟哥的linux私房菜和Linux内核源码剖 阅读全文
posted @ 2013-05-05 14:28 Benjamin-T 阅读(2702) 评论(8) 推荐(5) 编辑