随笔分类 -  操作系统

操作系统实现:malloc 与 堆 实现
摘要:本文参考书:操作系统真像还原 什么是malloc? malloc 是用户态申请内存时使用的函数。 malloc在哪里申请? 堆中。 什么是堆? 程序运行过程中需要申请额外的内存都会在堆中分配,堆中的内存分为几个规格类型的块用链表保存,程序需要内存就分配一个大于等于所需内存大小的块。如果一个规格的块用 阅读全文

posted @ 2022-06-10 10:45 thotf 阅读(259) 评论(0) 推荐(0) 编辑

操作系统实现:内存管理
摘要:本文参考书:操作系统真像还原、计算机组成原理(微课版) 所谓内存管理包含: 物理内存 虚拟地址空间 以上就是内存管理中所要管理的资源。那么内存管理的第一步就应该是整理出这两种资源。 物理内存要分为两部分: ①内核内存 ②用户内存 在内核态下也经常会有一些内存申请,比如申请个pcb、页表等等。内核态和 阅读全文

posted @ 2022-06-07 20:28 thotf 阅读(304) 评论(0) 推荐(0) 编辑

位图实现
摘要:位图就是用每个字节中的bit位代表一组资源的映射。 例如:一个字节有8位,在操作系统中可以用一个bit位代表一个4K的页,那一个字节就可以代表8页32K内存。 可以利用位图进行资源管理或分配。 位图结构如下: struct bitmap { unsigned int btmp_bytes_len; 阅读全文

posted @ 2022-06-04 11:36 thotf 阅读(60) 评论(0) 推荐(0) 编辑

GDT表实现
摘要:GDT是保护模式下的内存段登记表。 段界限计算 段界限用 20 个二进制位来表示。只不过此段界限只是个单位量,它的单位要么是字节,要么是 4K,这是由描述符中的G位来指 定的。由于段界限只是个偏移量,是从 算起所以实际的段界限边界值= (描述符中段界限+1) * (段界限的粒度大小: 4k或者 1) 阅读全文

posted @ 2022-05-19 18:43 thotf 阅读(312) 评论(0) 推荐(0) 编辑

centos 安装bochs
摘要:下载地址 https://sourceforge.net/projects/bochs/files/bochs/ 我这里安装2.6.2 tar xvfz bochs-2.6.2.tar.gz 环境包 sudo yum install gtk2 gtk2-devel sudo yum install 阅读全文

posted @ 2022-05-18 15:36 thotf 阅读(310) 评论(0) 推荐(0) 编辑

了解CFS完全公平调度器
摘要:CFS模拟理想多任务调度 公平,即对于n个正在运行的任务,当这些任务同时不断地运行时,CPU会尽可能分配给他们1/n的处理时间。CFS是一种基于加权公平排队思想的调度算法。 精确,指的是它采用红黑树作为调度的任务队列的数据结构。 为了实现CFS,很关键的一点就是进行时间记账。 时间记账:为每个进程维 阅读全文

posted @ 2022-05-12 16:54 thotf 阅读(187) 评论(0) 推荐(0) 编辑

调度器简介
摘要:内核中用来安排进程执行的模块称为调度器(scheduler),它可以切换进程状态(process state)。例如执行、可中断睡眠、不可中断睡眠、退出、暂停等。 调度器是CPU中央处理器的管理员,主要负责完成做两件事情: 一、选择某些就绪进程来执行, 二是打断某些执行的进程让它们变为就绪状态。调度 阅读全文

posted @ 2022-05-12 16:22 thotf 阅读(1181) 评论(0) 推荐(0) 编辑

什么是进程
摘要:进程:是指计算机中已运行的程序。进程本身不是基本的运行单位,而是线程的容器。程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。 进程是程序动态的形式。 进程生命周期Linux操作系统属于多任务操作系统,系统中的每个进程能够分时复用CPU时间片,通过有效的进程调度 阅读全文

posted @ 2022-05-12 10:59 thotf 阅读(1211) 评论(0) 推荐(0) 编辑

linux内核源代码组织结构
摘要:linux版本 linux 3.6.24 第一个数字主版本号 第二个数字是偶数代表是稳定版 第三个代表修订次数 阅读全文

posted @ 2022-05-12 10:37 thotf 阅读(20) 评论(0) 推荐(0) 编辑

wait() 进程控制函数实现伪代码
摘要:wait()的实现 父进程调用 wait() wait() { 进入系统调用 sys_wait() } sys_wait () { for { x = true for (循环所有就绪进程pcb) { 如果存在父进程的子进程则 x = false } if x { 如果不存在父进程的子进程 brea 阅读全文

posted @ 2022-05-10 15:40 thotf 阅读(89) 评论(0) 推荐(0) 编辑

操作系统实现:断点切换原理及实现
摘要:本文参考书:操作系统真像还原、操作系统原型xv6分析与实验、其中图主要来自linux内核完全注释 本文针对断点切换迷茫的问题。 详解内核态-用户态的栈变化, 了解用户态-内核态的实现原理和代码分析 为帮助大家理解,我将模拟断点切换时的栈变化过程。 首先要知道几个基础概念 ①调用约定: C语言是用cd 阅读全文

posted @ 2022-05-10 11:04 thotf 阅读(424) 评论(0) 推荐(0) 编辑

操作系统启动流程
摘要:不同的操作系统在启动的过程中虽然会有不同的处理,但是核心的几个要点是都一样的。 本文图主要来自linux内核设计艺术 加电 ①加电,CS=0xF000,IP=0XFFF0。实模式下寻址模式 cs左移4位+IP,所以cs:ip指向的是0xFFFF0。这个地址指令属于BIOS,会进行硬件检测、内存中中断 阅读全文

posted @ 2022-03-15 11:26 thotf 阅读(276) 评论(0) 推荐(0) 编辑

虚拟内存实现
摘要:本文参考书:操作系统真相还原 上篇文章 https://www.cnblogs.com/thotf/p/15947403.html 主要说了虚拟内存的应用,本篇来说具体实现过程,以内核虚拟地址空间的二级页表为例 要想实现虚拟内存,首先要生成页表,页目录和页表连续存放。 如上图, ①就是要在内存中选择 阅读全文

posted @ 2022-03-14 15:51 thotf 阅读(232) 评论(0) 推荐(0) 编辑

分段、分页虚拟内存访问原理、应用
摘要:参考书及图来源:x86实模式到保护模式、操作系统真像还原、操作系统导论、mooc计算机系统基础 分段机制 一个段是地址空间里一个定长的区域,在典型的地址空间中分为3个逻辑不同的段:代码、栈、堆(实际更多) 分段机制使得操作系统将不同的段加入到不同的物理内存区域。 上图为将一个程序分为代码、堆、栈 三 阅读全文

posted @ 2022-03-13 16:37 thotf 阅读(205) 评论(0) 推荐(0) 编辑

小数精度丢失问题
摘要:例子: x := 74.96 y := 20.48 b := x - y fmt.Println(b) //output: 54.47999999999999 上面是使用普通编码 硬编码的方式如下: fmt.Println(74.96-20.48) //54.48 百度关于硬编码的解释一堆话 以上的 阅读全文

posted @ 2020-05-04 19:15 thotf 阅读(397) 评论(0) 推荐(0) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示