linux 多任务浅析(三)

前两篇已经说过了多任务的切换原理,留有一个问题,就是linux跳过了分段,逻辑地址总是等于线性地址那么是如何对进程进行隔离的?

再说这个之前有几个概念

1.物理内存--你可以直接理解为你的内存条。

2.虚拟内存--假设你的电脑是32位的那么他的寻址空间为4G,但假设你的内存只有2G,如果有的程序分配到了超出2G的数据段怎么办?实际上x86体系会使用虚拟内存技术,他会将系统最用不到的内存数据读出来放在外设比如磁盘中,然后把你这个超出的内容再放入内存,你看似是递增的但实际上他不是,他是利用的其他的空间。你实际拥有的内存就成了4G你感觉是连续线性增长的但实际上是被做了手脚的,我们不用关心系统如何做到只要用这4G就可以了。(这只是感观说法,下面会官方化一下)

3.逻辑地址。程序中经过gcc编译的基本就是逻辑地址,选择子+偏移地址组成。

4.线性地址(又叫虚拟地址)。线性地址是段基址+偏移地址,在linux由于各个段基址都是0所以虚拟地址就是逻辑地址。

5.线性地址到物理地址还有一次转化就是分页转化。

linux将虚拟地址和物理地址都按照4k一个单位大小分成若干块,虚拟地址与物理地址又是一一对应的,虚拟内存的块叫做页,物理地址块叫做页帧。那么问题来了,虚拟地址大于物理地址啊这个就是2中的情况,linux是这么处理的,linux有一个页面失效功能,linux找到物理内存最少使用的那个页帧,让他失效并将之写入磁盘,然后把要访问的页放入这个页帧,最后修改页表中的映射。

每一个任务都会维护一个自己的页表,这个页表就是虚拟地址向物理地址的映射关系,不同的任务相同的虚拟地址会被映射到不同的物理地址,这个过程系统会为我们去做我们无需关心。这么看来分页机制才是linux保护模式的核心。

参考

http://www.cnblogs.com/curtful/archive/2012/02/16/2354496.html

时间: 2024-10-12 02:27:42

linux 多任务浅析(三)的相关文章

linux 多任务浅析(二)

在一中我们说到了多任务即不同进程都有自己的独立的代码段,数据段,堆栈段.看似利用这个原理能将多任务隔离,但是他们各个段的起始地址又都是0,这就是很无语了,不过没关系,分页的时候会接着讲.这篇文章说一下多任务的切换. x86体系从硬件上支持任务间的切换,也就说实际上linux同一时间只是在运行一个任务,但是由于他可以在很短的时间在不同的任务间来回切换执行,我们感觉上他是多个任务一起执行的.既然要在任务间来回切换那么势必就要记录每一个进程被切换时的状态,以便切换回来的时候恢复.所有每一个进程都有属于

一步步学习Linux多任务编程(陆续更新)

系统调用 01.什么是系统调用? 02.Linux系统调用之I/O操作(文件操作) 03.文件描述符的复制:dup(), dup2() 多进程实现多任务 04.进程的介绍 05.Linux可执行文件结构与进程结构 06.多进程实现多任务(一):fork() 07.多进程实现多任务(二):vfork() 08.进程的控制:结束进程.等待进程结束 09.Linux特殊进程之僵尸进程 10.Linux特殊进程之孤儿进程 11.Linux特殊进程之守护进程 12.进程替换:exec函数族 进程间通信 1

一步步学习Linux多任务编程

系统调用 01.什么是系统调用? 02.Linux系统调用之I/O操作(文件操作) 03.文件描述符的复制:dup(), dup2() 多进程实现多任务 04.进程的介绍 05.Linux可执行文件结构与进程结构 06.多进程实现多任务(一):fork() 07.多进程实现多任务(二):vfork() 08.进程的控制:结束进程.等待进程结束 09.Linux特殊进程之僵尸进程 10.Linux特殊进程之孤儿进程 11.Linux特殊进程之守护进程 12.进程替换:exec函数族 进程间通信 1

运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库

运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 运用Python语言编写获取Linux基本系统信息(二):文件系统使用情况获取 一.实验环境: Python2.7.10.pycharm.VM虚拟机.CentOS6.3.mysql 二.MySQLdb模块: MySQLdb模式是Python中专门连接MySQL数据库的模块,另外Python开发环境的搭

Linux课题实践三——字符集总结与分析

Linux课题实践三——字符集总结与分析 20135318  刘浩晨 字符是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等.字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集.GB2312字符集.BIG5字符集. GB18030字符集.Unicode字符集等. 1.总结ISO.UCS/UTF.GB系列字符集的由来.异同 (1).ISO/IEC ISO/IEC 646:是国际标准化组织(ISO)及国际电工委员会(IEC)联合制定

Linux 进程调度浅析

概述 操作系统要实现多进程,进程调度必不可少.有人说,进程调度是操作系统中最为重要的一个部分.我觉得这种说法说得太绝对了一点,就像很多人动辄就说"某某函数比某某函数效率高XX倍"一样,脱离了实际环境,这些结论是比较片面的. 而进程调度究竟有多重要呢? 首先,我们需要明确一点:进程调度是对 TASK_RUNNING 状态的进程进行调度.如果进程不可执行(正在睡眠或其他),那么它跟进程调度没多大关系.所以,如果你的系统负载非常低,盼星星盼月亮才出现一个可执行状态的进程.那么进程调度也就不会

终于拿到《构建高可用Linux器(第三版)》样书了

从知道<构建高可用Linux器(第三版)>即将出版上市到拿到样书,确实等了不少天,终于拿到<构建高可用Linux器(第三版)>样书了,从酝酿出书的第一版到如今的第三版,五年心血,几终易稿,个中心酸只有自知,对自己也算是有个交待了.

windows 8(8.1) 、windows 7 、linux(fadora,ubuntu) 三个系统安装方法介绍

因工作需要特地才做三个系统,其中windows 7 和fadora 19作为工作用的,本人在windows 7 下和fadora 19分别做微软Nao仿真足球机器人和Robcup3D仿真足球机器人.剩下的windows 8.1作为平时用. 1. windows 8(8.1) .windows 7 .fadora 安装方法 我目前用的系统就是windows 8.1 X64 .windows 7 X86 .fadora 19 此前装了这三个系统之前因为最后一个fadora 系统没搞定,连续重装了4,

嵌入式 Linux进程间通信(三)——守护进程

嵌入式 Linux进程间通信(三)--守护进程 一.守护进程简介 1.守护进程简介 守护进程(Daemon)是运行在后台.独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件的一种特殊进程.守护进程常常在系统引导装入时启动,在系统关闭时终止.Linux的大多数服务器就是用守护进程实现的.比如,Internet服务器inetd,Web服务器httpd等.同时,守护进程完成许多系统任务.比如,作业规划进程crond等.守护进程的创建本身并不复杂,复杂的是各种版本的Unix的实现机制不尽相同