Lab2:物理内存管理】的更多相关文章

一.lab2物理内存管理介绍 操作系统的一个主要职责是管理硬件资源,并向应用程序提供具有良好抽象的接口来使用这些资源. 而内存作为重要的计算机硬件资源,也必然需要被操作系统统一的管理.最初没有操作系统的情况下,不同的程序通常直接编写物理地址相关的指令.在多道并发程序的运行环境下,这会造成不同程序间由于物理地址的访问冲突,造成数据的相互覆盖,进而出错.崩溃. 现代的操作系统在管理内存时,希望达到两个基本目标:地址保护和地址独立. 地址保护指的是一个程序不能随意的访问另一个程序的空间,而地址独立指的…
总的来讲把的LAB1代码逻辑理顺后再往后学就轻松了一大截.LAB2过遍课程视频,再多翻翻实验指导书基本上就没遇到啥大坎儿.对这节学得东西做个总结就是一张图: 练习0:填写已有实验 本实验依赖实验1.请把你做的实验1的代码填入本实验中代码中有"LAB1"的注释相应部分. 提示:可采用diff和patch工具进行半自动的合并(merge),也可用一些图形化的比较/merge 工具来手动合并,比如meld,eclipse中的diff/merge工具,understand中的diff/merg…
前言 现在内存管理的方法都是非连续内存管理,也就是结合段机制和分页机制 段机制 段地址空间 进程的段地址空间由多个段组成,比如代码段.堆栈段和符号表段等等 段对应一个连续的内存"块" 不同段在物理内存中是分散的二维结构 段访问 首先由CPU读取逻辑地址,逻辑地址由段号和段内偏移组成 通过段寄存器找到相应的段描述符获得段基址 然后由MMU判断长度是否符合,否则就引发内存异常 最后通过段基址和段内偏移找到真实的物理内存 页机制 页机制把真实的物理内存分为大小相同的基本分配单位,叫做页帧,再…
资源 OS2018Spring课程资料首页 uCore OS在线实验指导书 ucore实验基准源代码 MOOC OS习题集 OS课堂练习 Piazza问答平台 暂时无法注册 疑问 段式内存管理中,逻辑地址由段选择子和段偏移量两部分组成?段选择子占16位,低3位为TI(指示是GDT还是LDT)和RPL,也就是说逻辑地址中含有TI和RPL信息?但好像内存地址只包含位置信息的吧?答: 逻辑地址是由段选择子和段偏移量组成.用逻辑地址的段选择子索引GDT得到段基址,段基址加上逻辑地址的段偏移量得到线性地址…
本文为上海交大 ipads 研究所陈海波老师等人所著的<现代操作系统:原理与实现>的课程实验(LAB)的学习笔记的第二篇.所有章节的笔记可在此处查看:chcore | 康宇PL's Blog 实验准备 首先一句 git merge lab2 把 Lab 2 分支合并到当前分支下. 这章中为了方便调试我手动将 CMakeLists.txt 中构建类型从 Release 改为 Debug set(CMAKE_BUILD_TYPE "Debug") # "Release…
2017-02-23 一.伙伴系统 LInux下用伙伴系统管理物理内存页,伙伴系统得益于其良好的算法,一定程度上可以避免外部碎片为何这么说?先回顾下Linux下虚拟地址空间的分布. 在X86架构下,系统有4GB的虚拟地址空间,其中0-3GB作为用户空间,而3-4GB是系统地址空间.linux系统系统地址空间理论上应该不可换出,即每个虚拟页面均会对应一个物理页帧.如果这样的话,系统地址空间就能使用1GB,如果系统有多余的内存,这里仍然使用不上,这就限制了其性能的发展.为了解决这一问题,就有了高端内…
内存中的物理内存管理 概述 一般来说,linux内核一般将处理器的虚拟地址空间划分为2部分.底部比较大的部分用于用户进程,顶部则专用于内核. 在IA-32系统上,地址空间在用户进程和内核之间划分的典型比例是3:1.给出4GB的虚拟地址空间,3GB用于用户空间,而1GB用户内核. 4GB是32位系统上可以寻址的最大内存2的32次方为4GB. 在64位计算机上,由于可用的地址空间非常巨大,因此不需要搞点内存模式. 有2中类型的计算机以不同方法管理内存 UMA计算机 一致性内存访问,uniform m…
lab2 中的变动 bootloader 的入口发生了改变 bootloader不像lab1那样,直接调用kern_init函数,而是先调用位于lab2/kern/init/entry.S中的kern_entry函数.kern_entry函数的主要任务是为执行kern_init建立一个良好的C语言运行环境(设置堆栈),而且临时建立了一个段映射关系,为之后建立分页机制的过程做一个准备(细节在3.5小节有进一步阐述).完成这些工作后,才调用kern_init函数. 通过 BIOS 中断获取内存布局有…
Lab2 0. 任务介绍 你将编写一个内存管理代码.主要分为两大部分.分别对物理内存和虚拟内存的管理. 对于物理内存,每次分配内存分配器会为你分配4096bytes.也称为一个页(在大部分操作系统中一个页的大小都是4B)你需要维护一个数据结构来记录哪个物理页是空闲的哪个物理页是已被占用的.以及有多少进程共享已分配的页.并且你需要编写程序来进行内存的分配和回收 对于虚拟内存,它将内核和用户软件使用的虚拟地址映射到物理内存中的地址. x86硬件的内存管理单元(MMU)在指令使用内存时执行映射,查阅一…
2017-03-02 在Linux下的物理内存管理中,对SLAB机制大致做了介绍,对SLAB管理结构对象也做了介绍,但是对于小内存块的分配没有介绍,本节重点介绍下slab对小内存块的管理. 内核中使用全局的kmem_cache数组kmalloc_caches组织不同大小的缓存块,每个缓存块由一个kmem_cache结构描述,缓存块大小一般是按8字节递增,分配时不足8字节按照8字节算,依次向上舍入.内核有两种方式根据size获取对应的阶 1.使用一个size_index数组保存对应内存块的阶,当s…
1.为什么需要连续的物理内存: Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数个4k(在i386体系结构中)大小的页,从而分配和回收内存的基本单位便是内存页了.利用分页管理有助于灵活分配内存地址,因为分配时不必要求必须有大块的连续内存[3],系统可以东一页.西一页的凑出所需要的内存供进程使用.虽然如此,但是实际上系统使用内存时还是倾向于分配连续的内存块,因为分配连续内存时,页表不需要更改,因此能降低TLB的刷新率(频繁刷新会在很大程度上降低访问速度). 1.物理内存页和p…
7.2.1 分区内存管理 把内存分为若干个区给用户使用 单一区存储管理 分区存储管理 固定分区 动态分区 单一区存储管理(不分区存储管理) 定义:用户区不分区,完全被一个程序占用.例如:DOS 优点:简单,不需要复杂硬件支持,适于单用户单任务OS 缺点: 程序运行占用整个内存,即使小程序也是如此 内存浪费,利用率低 分区存储管理 定义: 把用户区内存划分为若干大小不等的分区,供不同程序使用 适合单用户担任内务系统 分类: 固定分区 动态分区 固定分区 把内存固定地分为若干大小不等的分区供各个程序…
1. ucore lab4介绍 什么是进程? 现代操作系统为了满足人们对于多道编程的需求,希望在计算机系统上能并发的同时运行多个程序,且彼此间互相不干扰.当一个程序受制于等待I/O完成等事件时,可以让出CPU给其它程序使用,令宝贵的CPU资源得到更充分的利用. 操作系统作为大总管需要协调管理各个程序对CPU资源的使用,为此抽象出了进程(Process)的概念.进程顾名思义就是进行中.执行中的程序. 物理层面上,一个CPU核心同一时间只能运行一个程序,或者说一个CPU核心某一时刻只能归属于一个特定…
1. ucore lab5介绍 ucore在lab4中实现了进程/线程机制,能够创建并进行内核线程的调度.通过上下文的切换令线程分时的获得CPU,使得不同线程能够并发的运行. 在lab5中需要更进一步,实现我们平常开发接触到的.运行在用户态的进程/线程机制.用户线程通常用于承载和运行应用程序,为了保护操作系统内核,避免其被不够鲁棒的应用程序破坏.应用程序都运行在低特权级中,无法直接访问高特权级的内核数据结构,也无法通过程序指令直接的访问各种外设. 但应用程序访问高特权级数据.外设的需求是不可避免…
ucore是清华大学提供的一个学习操作系统的平台.ucore有完整的mooc视频与说明文档. https://objectkuan.gitbooks.io/ucore-docs/content/# 本文将主要记录在完成ucore平台的实验时,个人认为ucore内核及Result中的存在的问题,以及部分挑战练习内容.由于个人水平有限,可能理解有误,欢迎前来讨论. 本文主要内容: Lab2 物理内存管理 练习一 Result代码错误 Lab3 虚拟内存管理 挑战练习 Clock算法实现 Lab8 文…
日期:2019/3/31 内容:UCore-Lab0 一.UCore实验 实验 说明 关键词 Lab1 bootloader的实现 中断 Lab2 物理内存管理 x86分段/分页模式 Lab3 虚拟内存管理 缺页故障.页表替换 Lab4 内核线程管理 内核态线程 Lab5 用户进程管理 用户态进程创建.执行.切换和结束 Lab6 进度调度管理 CPU管理 Lab7 同步互斥 进程通信.死锁 Lab8 文件系统 IO访问.VFS 二.AT&T语法 AT&T: asmop src, dst I…
1. ucore lab6介绍 ucore在lab5中实现了较为完整的进程/线程机制,能够创建和管理位于内核态或用户态的多个线程,让不同的线程通过上下文切换并发的执行,最大化利用CPU硬件资源.ucore在lab5中使用FIFO的形式进行线程调度,不同的线程按照先来先服务的策略,直到之前创建的线程完全执行完毕并退出,后续的线程才能获得执行机会. FIFO的策略固然简单,但实际效果却非常差.在非抢占的FIFO调度策略中,如果之前的线程任务耗时很长,将导致后续的线程迟迟得不到执行机会而陷入饥饿:即使…
1. ucore lab7介绍 ucore在前面的实验中实现了进程/线程机制,并在lab6中实现了抢占式的线程调度机制.基于中断的抢占式线程调度机制使得线程在执行的过程中随时可能被操作系统打断,被阻塞挂起而令其它的线程获得CPU.多个线程并发的执行,大大提升了非cpu密集型应用程序的cpu吞吐量,使得计算机系统中宝贵的cpu硬件资源得到了充分利用. 操作系统提供的内核线程并发机制的优点是明显的,但同时也带来了一些问题,其中首当其冲的便是线程安全问题. 并发带来的线程安全问题 线程安全指的是在拥有…
百篇博客系列篇.本篇为: v17.xx 鸿蒙内核源码分析(物理内存篇) | 怎么管理物理内存 | 51.c.h .o 内存管理相关篇为: v11.xx 鸿蒙内核源码分析(内存分配篇) | 内存有哪些分配方式 | 51.c.h .o v12.xx 鸿蒙内核源码分析(内存管理篇) | 虚拟内存全景图是怎样的 | 51.c.h .o v14.xx 鸿蒙内核源码分析(内存汇编篇) | 谁是虚拟内存实现的基础 | 51.c.h .o v15.xx 鸿蒙内核源码分析(内存映射篇) | 虚拟内存虚在哪里 |…
ucore Lab2 lab 2 直接执行make qemu-nox会显示 assert 失败: kernel panic at kern/mm/default_pmm.c:277: assertion failed: (p0 = alloc_page()) == p2 - 1 1 连续物理内存管理 1.1 page 概览 对物理内存的管理,为了节省空间,也是为了配合接下来的虚拟内存管理,通常以某个比 byte 大一些的单位进行管理,我们称这一单位内存为一"页(page)",通常是 4…