linux0.12内核的内存组织和进程结构

Linux 内存分析——进程和物理结构角度 文章目录前言进程如何使用内存进程地址空间虚拟内存在内核中的实现系统上查看进程内存进程用来申请内存的函数共享内存实现进程间通讯64位系统地址空间从物理内存角度看内存内存页及虚拟内存到物理内存的映射物理内存的 ZONE伙伴系统buddy 和 slab物理内存的申请函数两种角度如何联系起来从用户态到内核态书籍推荐及相关链接 前言 关于 Linux 内存管理方面一些文章和书籍中都使用大量的篇幅去讲解,本篇... 阅读详情

进程结构

Linux0.12中的每个进程都有如下的结构:

  1. 在gdt中占有两项,一项是tss段描述符,一项是ldt段描述符。

  2. 在task数组中占有一项,指向一页物理内存,该物理内存低端是进程控制块task_struct(里面包括tss段和ldt段),其余部分是进程的内核态堆栈。

  3. 在页目录表和页表中设置有相关项。

Linux0.12中,最多只有64个进程,task数组大小也定义成了64,每个进程与一个task数组中的项一一对应。虽然gdt中有256项,但是并不是都用到。第一个gdt项保留不用,内核用2个项,然后系统为每个进程保留2项。这样一个进程与2个gdt项一一对应。也就是linux0.12中task数组和gdt的分配是定死的,比如一个进程的任务数组项好为nr,即它的进程控制块由task[nr]指向,那么它的tss描述符和ldt描述符分别位于gdtr+3*8+nr*16和gdtr+3*8+nr*16+8处。

Linux0.12内存物理地址0处开始放着一页页目录表和四页页表。这一个页目录表是所有进程共享的。其后的四页页表正好映射16M物理内存,是内核和进程0的页表。以后创建进程时页表需要从主内存区申请,而页目录项直接从页目录表中取。这样进程和页目录表页存在这一一对应关系,任务号为nr的进程,对应页目录的第nr*16~(nr+1)*16一共16个目录项。这样4G的线性空间由64个进程共享,每个进程分到64M。

三个结构的一一对应关系如图所示



linux0.12之内核代码之fork.c说明 在system_call.s中.align 2 _sys_fork: call _find_empty_process testl %eax,%eax js 1f push %gs pushl %esi pushl %edi pushl %ebp pushl %eax call _copy_process addl $20,%esp 1: ret这是系统fork入口,会调用两个 阅读详情

相关推荐

Linux 0.12源码深入解析与学习指南

本文还有配套的精品资源,点击获取 简介:Linux 0.12作为Linux操作系统的一个早期版本,提供了对于操作系统工作原理及Linux内核发展历史的宝贵洞见。通过赵炯的《深入理解Linux内核》或类似书籍,结合Linux 0.12的源代码,可以深入学习内核架构、进程管理、内存管理、文件系统、设备驱动、网络支持、系统调用、编译构建、调试工具等关键知识点。本资料旨在帮助开发者...

weixin_42298778的博客 1029

Linux内核笔记,从实模式到保护模式

何为实模式运行?即程序直接寻址,逻辑地址即是物理地址。在linux系统启动初期,即是运行在实模式。 实模式简单易懂,为何还要运行在保护模式? 答案:为了更好的分配管理内存。 保护模式是如何运行的?分两步: 1.从程序逻辑地址 寻找到段描述符,逻辑地址变换为线性地址。 2.线性地址,寻找到页表。 从线性地址变换为物理地址。 段描述符保存在段表中,段表目录即是全局描述符表GDT. GDT的基地址保存在GDTR寄存器中。局部描述符表基地址 在GDT 中的描述符来指定。 每个任务在 GDT 中占有两个描述符项。GD

qq_37612662的博客 540

linux0.12源代码

linux的早期版本中比较完善的版本,linus曾称其为他最满意的linux版本之一

linux 0.12 分析,《linux 0.12内核完全剖析》

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?笔记重点:重新分析进程的创建,发现最初的笔记还是比较简单,说起进程创建,不得不先了解进程0的创建。进程0之后创建的所有进程都是以这个进程为模板进行创建,进程0的创建过程是在系统启动的main.c中进行的,在系统初始化之前,手动设置这个进程0,更重要的是这个进程是在内核状态下切换到用户态运行的,所以之后的进程也都在用户态下...

weixin_42510835的博客 615

宝塔面板+pbootCMS建站全流程:从服务器选购到上线优化(附常见问题排查)

本文提供了一份详尽的宝塔面板与pbootCMS建站实战指南。内容涵盖从云服务器选购、宝塔面板部署与安全加固,到pbootCMS安装、权限配置、数据库连接等核心步骤。同时深入讲解了PHP环境优化、Nginx伪静态设置、缓存开启等性能与SEO优化技巧,并附有常见问题排查与后期维护建议,帮助用户高效、稳健地完成专业网站构建。

e4f5g6h的博客 659

如何利用CANoe在两路CAN通道之间创建网关(gateway)

CANoe网关,利用CAPL实现CAN转发

Richy_Lai的博客 7895

操作系统学习:进程、线程与Linux0.12初始化过程概述

本文参考书籍 1.操作系统真相还原 2.Linux内核完全剖析:基于0.12内核 3.x86汇编语言 从实模式到保护模式 ps:基于x86硬件的pc系统 进程 进程是一种控制流集合,集合中至少包含一条执行流,执行流之间就是相互独立的,但它们共享进程的所有资源,它们是处理器的执行单位,或者称为调度单位,它们就是线程。 每个进程都运行在自己的地址空间中,有内存空间才能存储资源,因此进程...

qq_33339479的博客 1179

从生成到检测:全面解析Deepfake技术的演进与对抗策略

本文全面解析了Deepfake技术的演进与对抗策略,从GAN生成技术到先进的检测手段,探讨了其在娱乐与安全领域的双重影响。文章详细介绍了Deepfake的核心原理、技术迭代关键节点以及最新的检测方法,揭示了AI生成与识别的激烈博弈。同时,展望了量子计算和生物特征认证在未来攻防战中的潜在应用。

jenkins8butler的博客 255

Linux0.12任务调度与进程切换

1.schedule():选择系统中下一个要运行的进程 (1)循环检测就绪队列中的每个任务 若任务的超时定时器超时 && 状态为可中断睡眠,则超时计时器清0,状态置为就绪 若任务的定时器过期,则定时器清0,SIGALARM信号置位(定时器!=超时定时器) 若任务除了阻塞信号外还有其它信号 &&am...

weixin_30687587的博客 166

从零构建:用Simulink搭建固定翼无人机六自由度模型的避坑指南

本文详细介绍了使用Simulink从零构建固定翼无人机六自由度动力学模型的完整流程和避坑指南。重点解析了模型架构设计、气动力计算、参数配置、仿真求解器选择等关键环节的常见问题与解决方案,帮助开发者快速建立准确可靠的无人机控制系统仿真模型。

hhh00的博客 999

secureCRT 破解方法

3、输入注册信息打开keygen.exe,点击path,选择SecureCRT的安装目录(例如D:\VanDykeSoftware\Clients)的securecrt.exe打开,继续下一步打开LicenseHelper.exe,如下。1、注册SecureCRT9.1打开keygen.exe,出现以下问题(没有关掉安全防护,一双击打开,Windows会自动识别keygen.exe为bingdu并删除)打开桌面SecureCRT,此界面不输入内容,直接点击下一步。2、存储配置文件夹(可以默认安装)

逆水行舟 1万+

GDT表

gdt表在x86架构中用来存储内存的分段信息,通过段选择子进行访问,表的大小=0x10000=65536字节,每个表项占8字节,第一个表项为空,不使用,因此一共有8191个可用表项。表项结构如下 (图片来自https://blog.csdn.net/yeruby/article/details/39718119) 其中段限长决定了这个段的大小,总共占用20bit,最小单位由G位决定,...

lindorx的博客 1万+

PCL 建筑物点云立面和平面分割提取【2025最新版】

在建筑物点云中,立面点和平面点的法向量存在明显的差异,根据法向量在Z方向的分量设置相应得阈值即可实现立面点与平面点的分割。

点云侠的博客 1960

LINUX内核完全剖析基于0.12内核:深入理解Linux内核运作机制

LINUX内核完全剖析基于0.12内核:深入理解Linux内核运作机制 【下载地址】LINUX内核完全剖析基于0.12内核 《LINUX内核完全剖析:基于0.12内核》是一份深度解析Linux内核的珍贵资源,专注于0.12版本的Linux内核,全面涵盖内核架构、内存管理、进程调度等核心主题。通过本资料,您将深入理解Lin...

gitblog_06789的博客 765

【win10】win 10 电脑喇叭音频显示红叉的处理方法

目录 一、报错情况 二、“音频服务未运行”解决方法 三、“未插入扬声器或耳机”解决方法 一、报错情况 (1)当电脑的扬声器喇叭图标上带有红X符号,提示“音频服务未运行”时: (2)小喇叭上面有红叉,显示“未插入扬声器或耳机”时: 二、“音频服务未运行”解决方法 (1)开始菜单搜索“服务”: (2)没有启动的点击“启动”,已启动的点击“重新启动”: (3)继续,右...

顾三殇 —— 博客空间(软件测试) 17万+

1小时读完100篇文献的正确打开方式

各位同仁好,我是七哥。一个在高校里从事人工智能 相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。文献阅读与整理一般都是最先开始、却也最容易被低估的一步。很多学术同仁一开始就陷入越读越多、越读越乱的状态:论文下载了一大堆,但真正能用来支撑自己观点的内容却始终难以提炼出来。一方面,我们需要通过文献了解该研究领域的整体发展脉络,把握当前学界已经讨论到什么程度;

智能AI让学术科研更容易 48

LINUX内核完全剖析:基于0.12内核

LINUX内核完全剖析:基于0.12内核 【下载地址】LINUX内核完全剖析基于0.12内核 《LINUX内核完全剖析:基于0.12内核》是一份深度解析Linux内核的珍贵资源,专注于0.12版本的Linux内核,全面涵盖内核架构、内存管理、进程调度等核心主题。通过本资料,您将深入理解Linux内核的基本结构和工作原理,...

gitblog_06791的博客 496

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Linux0.12内核源码解读(6)-main.c

大家好,我是呼噜噜,好久没有更新old linux了,上次我们讲到了Linux0.12内核的,内核正式完成从汇编到c程序的切换,本文我们一起来看看main.s究竟发生了什么?系列文章目录main.c在内核源代码的init/目录下,我们知到main函数通常是C语言的入口,所以我们可以知晓这里的main是操作系统很重要的入口文件,main.c文件不是很大,但却包括了内核初始化的所有工作,主要是完成操作系统各种硬件数据结构的初始化。

小牛呼噜噜的博客 1405

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

《Linux内核完全剖析基于0.12内核.pdf》——深入Linux内核的绝佳伴侣

《Linux内核完全剖析基于0.12内核.pdf》——深入Linux内核的绝佳伴侣 【下载地址】Linux内核完全剖析基于0.12内核.pdf详细介绍 《Linux内核完全剖析基于0.12内核》是一份为Linux内核爱好者量身打造的深度解析资料。它以早期0.12内核为基础,带领读者从源头探索Linux内核的构建与演变。文...

gitblog_06750的博客 467

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

《Linux内核完全剖析基于0.12内核.pdf》详细介绍

《Linux内核完全剖析基于0.12内核.pdf》详细介绍 【下载地址】Linux内核完全剖析基于0.12内核.pdf详细介绍 《Linux内核完全剖析基于0.12内核》是一份为Linux内核爱好者量身打造的深度解析资料。它以早期0.12内核为基础,带领读者从源头探索Linux内核的构建与演变。文档全面剖析了内存管理、进...

gitblog_06721的博客 678

Linux 0.12内核与现代内核在内存管理上的区别

0.12内核的内存管理比较简单粗暴,内核只用了一个页目录,只能映射4G的线性空间,所以每个进程的虚拟空间(逻辑空间)只能给到64M,最多64个进程;每个进程都有对应的任务号nr,当一个进程需要分配进程空间时,只需要nr乘以64M就可以得出该进程空间的线性起始地址。然后该进程的代码段、数据段描述符里面的基址字段会被设定为(nr x 64M),同时可以为进程分配页目录项和页目录表用以承载映射关系。

Linux Kernel Developer 924

Linux内核——进程管理01(进程创建)

设置内容包括:pid、父进程pid、时间片优先级、tss、寄存器、分配代码段、数据段内存(调用。从这个系统调用过程可以看出:进程的创建就是一个进程的复制过程,或者说是对原进程的。3. 0号进程只会在其他进程不被调用时调用且不会结束,只会执行。在0号进程创建过程中提到进程的创建是一个系统调用的过程,因此在。函数)、继承父进程打开的文件、pwd、root目录等;1. 在task链表中找一个进程空位存放当前的进程。在内核初始化的过程中,会创建0号进程。2. 创建1号进程,在1号进程中打开。

u012891333的博客 1070

Linux内核笔记(二)--用户进程和内存管理

linux进程运行以及管理

自动驾驶工程师,算法开发工程师,知识分享博主 794

linux内核源码2.1进程管理和内存管理

linux内核源码进程管理和内存管理 我报一个班学习linux内核源码, 经过学习我将知识点整理到了这里 整理知识点链接。 只能说我学到点表皮, 相信聚沙成塔。 如果你有兴趣学习,我可以为你推荐,老学员推荐新学员,新学员有折扣,老学员也会获得对应的福利, 加我QQ哈: 852897652.  视频链接地址 我准备用三个博文来书写,每天写一个博文,正好三天可以更新完成。 下面我将进程管理课程和内存管理课程整理如下, 也许我整理不对,请指出。 ...

tan1666的博客 1336

linux进程和进程结构内存分布

这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读,某些架构也允许代码段为可写,即允许修改程序。BSS段属于静态内存分配。执行程序时,系统首先在内核空间中创建一个进程,为这个进程申请PCB(进程控制块task_struct)用于管理整个进程的所有资源,其中mm_struct成员用来管理与当先进程相关的所有内存资源。对和栈的其实地址默认是随机产生的,其目的是避免安全漏洞,但是可以指定堆中申请的起始地址。1.代码段,数据段,bss段,直接从磁盘拷贝到当前的内存空间,大小相等。...

blog 638

Linux内核源代码分析一(Linux0.12)

Linux 内核主要由 5 个模块构成,它们分别是:进程调度模块、内存管理模块、文件系统模块、进程间通信模块和网络接口模块。首先说一下pc机的启动流程,在加电后,80X86会先进入实模式并进入地址0XFFFF0开始自动执行代码,这个地址一般带表了BIOS的代码地址,PC的BIOS将会执行硬件检测和诊断功能,并在0地址进行中断向量的初始化,最后BIOS会将启动设备的第一个扇区读入地址0X7C00位置,并从这个位置开始执行代码。boot目录下包含三个汇编代码文件bootsect文件是在记录在磁盘的第一个扇区中,

qq_43147121的博客 3023
上一篇: Linux-0.12内核sleep_on函数分析
下一篇: linux搜索文件过程
OS技术解密
博客等级 码龄16年 3760粉丝 189原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值