
操作系统
文章平均质量分 96
暗夜猎手-大魔王
热爱运动,喜欢跑步
展开
-
动手写操作系统11----图层技术实现
本节实现图层技术,之前实现对于内存信息的图形化展示,但是由于没有使用内存管理功能,鼠标绘制和字符显示都是直接往显存位置处写数据,这样就会导致当移动鼠标重绘时直接改变显存位置数据而将字符数据直接擦除掉。这里采用图层技术,即背景窗口,字符以及鼠标数据不直接写入显存位置处,而是首先写入到不同的内存中,不同的图层对应不同的内存,当执行刷新函数时,由下到上开始绘制每一层图层,这样便可以实现不...原创 2020-03-01 11:34:17 · 951 阅读 · 0 评论 -
动手写操作系统10----内存管理实现
本节实现操作系统可用内存的检测,分析以及简单的链表内存管理1.可用内存检测的实现使用BIOS 15h中断来检测内存,具体步骤如下:1: 将寄存器ax 赋值为 0E820h2 : 将寄存器ebx 初始化为0,该寄存器的内容会被BIOS修改,须保证内存查询过程中,该寄存器不会被修改。3: es:di 指向一块足够大的内存地址,BIOS会把有关内存的信息写到这个地址,内存信息是一种数...原创 2020-02-28 16:10:37 · 807 阅读 · 0 评论 -
动手写操作系统9----键盘&鼠标中断实现
键盘&鼠标中断实现本节主要实现键盘中断和鼠标中断,键盘中断实现将键盘数据显示到屏幕;鼠标中断实现鼠标位置的移动。 键盘中断通过主8259A的IRQ1触发,鼠标中断通过从8259A的IRQ4触发CPU通过中断向量号来寻址待执行的中断代码中断向量号 = 起始向量号 + 中断请求号...原创 2020-02-19 18:13:33 · 4173 阅读 · 1 评论 -
动手写操作系统8----内核中断机制实现
内核中断实现21321#include<stdio.h>#include "io.h"#include "ascii_font.h"//定义调色板颜色#define COL8_000000 0#define COL8_FF0000 1#define COL8_00FF00 2#define COL8_FFFF00 3#define COL8...原创 2020-02-17 14:33:25 · 934 阅读 · 0 评论 -
动手写操作系统7----绘制内核字体&鼠标指针
本节实现绘制内核字体以及鼠标指针。内核图形绘制原理通过将指定位置的像素点设置成给定颜色而形成的最终图形,如下图: 把一块图形区域先全部染成白色,然后在将某个位置的像素点的颜色设置成黑色,那么,字体就显示出来了。如果我们把字体的大小限定在一个8*16的长方形区域,那么我们在这个区域内,将特定位置的像素点设置成黑色,其他...原创 2020-02-10 22:04:14 · 777 阅读 · 0 评论 -
动手写操作系统6----调色板
本节实现调色板功能,之前开启显存的图形模式,对于每一个像素点利用8位数字来表示颜色,可以得到256种颜色,颜色丰富度不够,因此使用调色板功能来增强颜色显示,使用RGB模式,表示一个RGB颜色需要24位数。调色板功能简单实现 调色板原理:把多种RGB颜色的24位数值放入到一个数组中,原来的八位数不再对应一个颜色值,而是变成这个数组的下标,硬件在显示像素颜色时,从...原创 2020-02-09 16:47:08 · 1180 阅读 · 0 评论 -
动手写操作系统5----C语言实现绘制系统界面
本节实现C语言与汇编互相调用,利用C语言实现系统界面绘制功能。之前显示字符串等功能都是使用显卡的字符界面模式,接下来需要打开显卡的图形模式,打开显卡图形模式需要使用BIOS INT 0x10中断 ;设置屏幕色彩模式 mov al, 0x13 mov ah, 0 INT 0x10其中al 的值决定了要设置显卡的色彩模式,下面是一些常用的模式设置:0x0...原创 2020-02-09 14:10:25 · 3625 阅读 · 0 评论 -
动手写操作系统4----实现保护模式
这里实现引导区和内核区分离以及保护模式功能。1.引导区和内核区分离实现 前面实现制作虚拟软盘,引导扇区写入代码来实现helloworld,系统启动来加载软盘的引导扇区即第一个扇区,由于第一个扇区只有512Byte,而操作系统内核必定大于512B,因此一般都将引导扇区作为内核加载器来使用,将操作系统代码放置于软盘的后续扇区中,当系统启动时,首先加载引导扇区,由引导扇...原创 2020-02-08 14:12:01 · 824 阅读 · 0 评论 -
动手写操作系统3----软盘读写逻辑实现
系统从软盘启动,加载软盘第一个扇区作为引导扇区来加载操作系统,第一个扇区大小为512byte,一般用来跳转到操作系统代码起始处,第一个扇区称为引导区,现在来研究一下软盘的物理结构,引导扇区的数据格式以及软盘的读写逻辑实现。软盘物理结构软盘的物理结构,以及软盘的数据读取方法 软盘的物理结构如上图,一个盘面被划分成若干个圆圈...原创 2020-02-07 17:09:57 · 2083 阅读 · 0 评论 -
动手写操作系统1----学习资源整理
最近学习了《30天自制操作系统》一书,深受启发,想自己也玩一下操作系统,之前也简单学习过,但是只是停留在表面,现在想动手实践一下,为此先总结有关操作系统的一些学习资源,个人觉得要想学习和理解好操作系统应该首先掌握好一下课程:1.计算机组成原理2.C语言基础3.汇编语言基础4.操作系统原理计算机组成原理参考资料1.计算机组成原理 ...原创 2020-02-06 16:17:00 · 689 阅读 · 0 评论 -
动手写操作系统2----环境搭建&OS HELLO WORLD
利用virtualBox虚拟机来模拟操作系统运行过程,主要使用工具1.virtualBox2.Ubuntu在windows上安装virtualBoxhttps://www.virtualbox.org/wiki/Downloads在virtualBox上安装ubuntu操作系统https://ubuntu.com/download 可以下载最新桌面版Ubuntu 19...原创 2020-02-07 11:40:19 · 498 阅读 · 0 评论 -
操作系统16----bootloader保护模式源码分析
bootloader保护模式源码分析环境准备安装VirtualBox 虚拟机软件安装Ubuntu镜像 项目组成结构系统启动过程BIOS启动过程bootloader启动过程qemu和gdb调试ucorebootloader 进入保护模式过程以清华大学u...原创 2019-07-23 15:55:31 · 1380 阅读 · 0 评论 -
Makefile教程(绝对经典,所有问题看这一篇足够了)
该篇文章为转载,是对原作者系列文章的总汇加上标注。支持原创,陈浩大神博客:http://blog.youkuaiyun.com/ha...转载 2019-07-23 08:20:24 · 434 阅读 · 0 评论 -
操作系统15----80386处理器基础
80386处理器基础Intel 80386运行模式实模式保护模式Intel 80386内存架构逻辑地址(虚拟地址)线性地址物理地址Intel 80386寄存器General Register(通用寄存器)Segment Register(段寄存器)...原创 2019-07-22 10:14:41 · 1499 阅读 · 0 评论 -
操作系统20----函数调用堆栈实现源码分析
由bootasm.S中汇编代码实现处理器初始化工作,为内核加载做好准备,其中最后比较重要的部分就是给段寄存器赋初值,设立堆栈指针,调用bootmain方法,开始内核加载。# Set up the stack pointer and call into C. The stack region is from 0--start(0x7c00) movl $0x0, %ebp mo...原创 2019-07-25 17:05:57 · 713 阅读 · 0 评论 -
操作系统14----I/O子系统
I/O子系统1.IO接口设备类型1.1字符设备1.2块设备1.3网络设备2.IO通信方式2.1阻塞I/O2.2非阻塞I/O2.3异步I/O3.IO结构3.1CPU与设备的连接3.2内核I/O结构3.3I/O请求生存周期...原创 2019-07-21 10:42:03 · 1247 阅读 · 0 评论 -
操作系统9----并发与同步
并发与同步1.并发2.临界区2.1临界区(Critical Section)2.2临界区访问规则3.临界区实现方法3.1.禁用中断3.2.软件方法3.2.1Peterson算法3.2.2Dekkers算法3.2.3N线程的软件方法(Eisenberg和McGu...原创 2019-07-18 08:54:36 · 615 阅读 · 0 评论 -
操作系统19----bootloader加载OS源码分析
经过bootasm.S中汇编指令执行,处理器为操作系统内核加载准备一系列设置,设置寄存器值,开A20,初始化GDT,进入保护模式,设置段寄存器,建立堆栈,之后便执行从硬盘加载操作系统内核。https://blog.youkuaiyun.com/u014106644/article/details/96965473首先操作系统内核代码被编译链接称为ELF格式的可执行文件,然后由bootloader加载到...原创 2019-07-25 11:14:14 · 906 阅读 · 0 评论 -
操作系统18----GCC内联汇编
在操作系统中需要对于硬件资源进行管理,对于处理器最直接的对外接口是机器指令,而汇编语言可以看做是机器指令的助记符,对于某些汇编语言来说,C语言并没有与之对应的语法来进行执行,因此在C语言中需要调用汇编语言,从而对硬件资源进行操作和管理。GCC内联汇编提供了在C语言中使用汇编语言的规范,GCC中内联汇编包括基本内联汇编语句( basic inlineasm statement)扩展...原创 2019-07-24 15:44:54 · 865 阅读 · 0 评论 -
献给新手,如何阅读Linux源码(转)
常常有人问:我想学习内核,需要什么基础吗?Linus Torvalds本人是这样回答的:你必须使用过Linux。 这个……还是有点太泛了吧,我想下面几个基础可能还是需要的,尽管不一定必需: 1, 关于操作系统理论的最初级的知识。不需要通读并理解《操作系统概念》《现代操作系统》等巨著,但总要知道分时(time-shared)和实时(real-time)的区别是什么,进程是个什么东西,CPU和...转载 2018-12-17 10:58:38 · 872 阅读 · 0 评论 -
Linux--网络带宽
查看网卡带宽查看LInux网络流量 cat /proc/net/dev[root@Ac-private-1 ~]# cat /proc/net/devInter-| Receive | Transmit face |bytes packets errs drop fif...原创 2018-12-26 11:10:39 · 1040 阅读 · 0 评论 -
Centos7--忘记root用户密码
突然发现服务器root用户登不上了,在机房解决了半天,在此用虚拟机记录一下操作过程。重启服务器,出现Centos7登录选择页面时,按e进入GRUB2引导页 编辑linux16 这一行 最后添加 rd.break console=tty0 Ctr+...原创 2019-04-03 14:56:38 · 3422 阅读 · 0 评论 -
操作系统4----非连续内存管理
非连续内存管理1.非连续内存管理1.1连续内存管理的缺点1.2非连续分配的设计目标2.段式存储管理2.1段地址空间2.2段访问机制3.页式存储管理3.1页帧Frame3.2页面Page3.3页表3.4页表结构3.5TLB3.6多级页表...原创 2019-07-15 09:34:23 · 830 阅读 · 0 评论 -
操作系统5----虚拟内存
虚拟内存1.虚拟内存需求背景2.覆盖和交换2.1覆盖技术2.2交换技术2.3覆盖技术和交换技术比较3.虚拟内存3.1局部性原理principle of locality3.2虚拟存储概念3.3虚拟存储基本特征3.4虚拟页式存储3....原创 2019-07-15 15:42:27 · 1437 阅读 · 0 评论 -
操作系统1----操作系统简介
操作系统简介操作系统定义操作系统地位操作系统软件分类操作系统内核特征操作系统实例操作系统演变操作系统结构操作系统定义操作系统并没有精确的定义方式,可以从控制程序和资源管理等方面来定义操作系统操作系统是一个控制程序一个系统软件控制程序执行过...原创 2019-07-11 16:00:15 · 383 阅读 · 0 评论 -
操作系统5----页面替换算法
页面替换算法1.局部页面置换算法1.1最优算法OPT1.2先进先出算法FIFO1.3最近最久未使用算法LRU1.4时钟置换算法CLOCK1.5改进时钟算法1.6最不常用算法LFU2.Belady现象3.全局页面置换算法3.1工作集和常驻集...原创 2019-07-15 21:27:00 · 2390 阅读 · 0 评论 -
操作系统10----并发与同步2
并发与同步21.信号量(semaphore)2.管程(Moniter)3.条件变量(Condition Variable)4.哲学家就餐问题5.读者-写者问题5.1读者优先----用信号量解决读者-写者问题5.2写者优先----用管程解决读者-写者问题...原创 2019-07-18 16:59:39 · 400 阅读 · 0 评论 -
操作系统2----启动和系统调用
启动和系统调用1.操作系统启动过程1.1计算机启动过程如下所示1.2启动时计算机内存和磁盘布局1.3主引导记录MBR格式1.4分区引导扇区格式1.5加载程序的内存地址空间2.中断,系统调用以及异常机制2.1基本概念2.2系统调用基本概念2.3系统调用实现...原创 2019-07-12 09:22:17 · 515 阅读 · 0 评论 -
操作系统6----进程和线程
进程和线程1.进程管理1.1进程定义1.2进程组成1.3进程特点1.4进程控制块PCB1.5进程控制信息1.6进程控制块组织1.7进程生命周期1.8.三态进程模型1.9进程挂起1.10状态队列2.线程管理2.1线程概念...原创 2019-07-16 15:31:21 · 304 阅读 · 0 评论 -
操作系统17----关于A20 Gate
转载自:关于A20 Gatehttp://hengch.blog.163.com/blog/static/107800672009013104623747/本来想直接写一篇关于保护模式的文章,因为有一位读者不断地问我这个问题,随着问题的深入,在评论上回答这个问题实在是太困难了,动起笔来,发现涉及的事情太多,免不了又是长篇大论惹人烦,而且要写很长时间,不知道我能不能把它写完,所以干脆把一...转载 2019-07-23 15:57:37 · 2020 阅读 · 0 评论 -
操作系统11----死锁
死锁1.死锁问题1.1资源分配图1.2出现死锁的必要条件2.死锁处理方法2.1死锁预防:限制申请方式2.2死锁避免3.银行家算法(Banker's Algorithm)3.1数据结构3.2安全状态判断3.3银行家算法4.死锁检测...原创 2019-07-19 08:59:40 · 288 阅读 · 0 评论 -
操作系统12----进程间通信IPC
进程间通信IPC1.进程通信(IPC, Inter-Process Communication)1.1直接通信1.2间接通信1.3阻塞通信1.4非阻塞通信2.信号(Signal)3.管道(pipe)4.消息队列5.共享内存1.进程通信(...原创 2019-07-19 09:49:52 · 313 阅读 · 0 评论 -
操作系统7----进程控制
进程控制1.进程切换2.进程创建fork3.进程加载和执行exec4.进程等待wait和终止exit1.进程切换进程切换(上下文切换)暂停当前运行进程,从运行状态变成其他状态,调度另一个进程从就绪状态变成运行状态进程切换的要求切换前,...原创 2019-07-17 08:10:46 · 298 阅读 · 0 评论 -
操作系统13----文件系统
文件系统1.文件系统基本概念2.文件系统实现3.文件分配4.空闲空间管理5.磁盘管理1.文件系统基本概念文件系统是操作系统中管理持久性数据的子系统,提供数据存储和访问功能。文件是具有符号名,由字节序列构成的数据项集合,是文件系统的基本数据单位...原创 2019-07-19 15:28:20 · 403 阅读 · 1 评论 -
操作系统8----CPU调度
CPU调度1.CPU调度1.1调度时机1.2调度准则2.批处理调度算法2.1先来先服务算法2.2短进程优先算法2.3最高响应比优先算法2.4时间片轮转算法2.5多级反馈队列算法2.6公平共享调度算法3.实时系统调度4.多处理器调...原创 2019-07-17 15:26:01 · 417 阅读 · 0 评论 -
Linux--IO介绍
参考地址:https://www.aliyun.com/jiaocheng/151413.html这篇文章写得太好了,忍不住学习一下,向大神学习。1.IO概述分析一下写操作:char *buf = malloc(MAX_BUF_SIZE);strncpy(buf, src, , MAX_BUF_SIZE);fwrite(buf, MAX_BUF_SIZE, 1, fp);...转载 2018-11-27 16:07:59 · 17099 阅读 · 5 评论