首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一个操作系统实现》笔记(6)--进程

---- 第1步–ring0->ring1 开始第一个进程,我们使用iretd指令来实现由ring0到ring1转移,转移成功后,就可以认为A进程在运行了。...每个进程都有自己LDT.所以当进程切换时需要重新加载ldtr 多进程实现–交替执行A和B进程 一个进程如何由“睡眠”态变成“运行”态?...---- 系统调用 用户进程因为特权级关系,无法访问某些权限更高内存区域, 只能通过系统调用来实现,它是应用程序和操作系统之间桥梁。 用中断可以方便地实现系统调用。...实现一个简单系统调用 操作系统给应用程序提供一个get_ticks()系统调用,用来获得当前总共发生了多少次时钟中断。...系统调用过程: - 1、“问”,告诉操作系统自己要什么; - 2、操作系统“找”,即处理; - 3、“回答”,也就是把结果返回给进程。

89441

一个操作系统实现》笔记(5)--内核雏形

---- 我们希望自己操作系统内核至少应该在Linux下用GCC编译链接。 Loader要做事有两件:加载内核入内存、跳入保护模式。...,它只不过是一段执行中代码,它与操作系统代码没有本质区别。...从操作系统角度看,进程必须是可控,这就涉及到进程和操作系统之间执行转换。因为CPU只有一个,同一时刻要么是客户进程在运行,要么是操作系统系统在运行。...如果实现进程,需要一种控制权转换机制,这种机制便是中断。 要添加中断处理,主要工作有两项:设置8259A和建立IDT。...以一个divide_error为例,它在kernel.asm中是一个导出符号,而exception_handler是在protect.c中定义一个处理程序,因为在init_prot初始化了,所以当发生

1.1K40
您找到你想要的搜索结果了吗?
是的
没有找到

一个操作系统实现》笔记(4)-- Boot&Loader

---- 一个操作系统从开机到开始运行,大致经历引导->加载内核入内存->跳入保护模式->开始执行内核这样一个过程。...如果文件内容大于512字节(一个扇区),这时候就需要用到FAT表了。 FAT表有两个,FAT2可看做FAT1备份,它们通常是一样。 FAT结构有点像一个位图。...每12位称为一个FAT项,从第2项开始表示数据区一个簇,FAT项值代表是文件一个簇号,但如果值大于或等于0xFF8,则表示当前簇已经是本文件最后一个簇了,所以只需要一直在FAT表里找下去直到最后一个簇号就能把该文件在数据区所有簇号找到从而读出完整数据内容...如果值为0xFF7,表示它是一个坏簇。 ---- 加载Loader到内存 BIOS中中断int 13h可以完成读软盘任务,从而把文件加载到内存中。...从磁盘将数据读入es:bx指向缓冲区中,每次读出一个簇,直到Loader文件所有数据都读到缓冲区为止。

86371

一个操作系统实现》笔记(2)--保护模式

在保护模式下,CPU有着巨大寻址能力,并为操作系统提供了虚拟内存和内存保护。...如何实现由实模式到保护模式转换 1、准备GDT 初始化GDT中各个描述符信息。...通过调用门进行控制转移特权级检查: ? 通过调用门和call指令,可以实现从低特权级到高特权级转移,无论目标代码段是一致还是非一致。...操作系统通过维护一个页目录和一些页表(存放在物理内存某个位置)来留意这些页面。...如果当前被访问页面不在物理内存中,处理器就会中断程序执行(通过产生一个页错误异常)。然后操作系统就可以从硬盘上把该页面读入物理内存中,并继续执行刚才被中断程序。

1.4K80

一个操作系统实现》笔记(3)--中断和IO保护

例如:当一个鼠标移动了,硬件鼠标中断现在程序来处理鼠标移动(移动鼠标,等等)。中断导致控制权转移到一个中断处理程序。中断处理程序是处理中断程序。每种类型 中断都分配了一个中断号。...由中断指令引起中断称为软中断。DOS使 用这些类型中断来实现API。 许多中断处理程序当它执行完成时,将控制权返回给被中断程序。它 们恢复寄存器,里面的值与中断发生之前值相同。...IDT作用是将每一个中断向量和一个描述符对应起来。 联系调用门我们知道,其实中断门或者任务门作用机理几乎是一样,只不过使用调用门时使用call指令,而这里我们使用int指令。...8259A是可编程中断控制器,通过向相应端口写入特定ICW(Initialization Command Word)来实现,在写入ICW2时涉及与中断向量号对应,这里IRQ8~IRQ15被设置成对应中断向量...中断或异常发生时堆栈 ? ---- 保护模式下I/O 保护模式下对I/O做了限制,用户进程如果不被许可是无法进行I/O操作。主要通过IOPL和I/O位图来实现

81260

一个操作系统_11 Linux是怎么实现线程

Linux 2.4内核中不知道什么是“线程”,只有一个“task_struct”数据结构,就是进程。...Linux内核有一个系统调用指令clone(),这个指令产生一个调用调用进程复件,而且这个复件与原进程使用同一地址空间。LinuxThreads计划使用这个系统调用来提供一个内核级线程支持。...Native POSIX Thread Library 一个操作系统比较全面的支持线程是需要改内核,怎么干改内核这个艰苦卓越工作?Linux是开源、免费,谁愿意来干这个活?...所以说Linux下通过NPTL创建线程是内核线程,他会在内核创建一个线程结构供处理器调度,也就是所谓1:1模型。...和baidu-rpc做法 当然,这部分不是Linux做,用户程序可以在内核线程支持下实现 参考资料 The Native POSIX Thread Library for Linux Introducing

1.2K10

一个操作系统实现》笔记(7)--输入输出系统(IO)

建立输入缓冲区 建立一个缓冲区,让keyboard_handler将每次收到扫描码放入这个缓冲区,然后建立一个任务专门用来解析它们并做相应处理。...在实模式下,我们通过BIOS中断来实现打印字符。 在保护模式下,我们在GDT中建立了一个段,它开始地址0xB8000,通过段寄存器gs对它进行写操作,从而实现数据显示。...通过端口操作设置相应寄存器就可以了。 ---- TTY任务 在TTY任务中执行一个循环,这个循环将轮训每一个TTY,处理它事件。 ?...printf()实现–可变参数 C调用约定,后面的参数先入栈,并且由调用者清理堆栈。 假设我们调用printf(fmt, i, j); 则堆栈情况将如下图: ?...,然后指定一个索引,执行sys_table相应函数就可以了。

70940

操作系统实现杂记

Hi~朋友,关注置顶防止错过消息 接下来几篇我都会写一下在实现操作系统相关功能涉及到知识点,最后会实现一个miniOS,如果感兴趣可以关注公众号置顶一波,一起成为有深度Coder。...cld用来将标志寄存器DF位置0,DF为作用用来控制内存方向,DF为0表示内存向高地址增加,DF为1表示内存向低地址减小。...在字串操作中使变址寄存器SI或DI地址指针自动增加,字串处理由前往后。 例如,以下三条指令执行后,SI自动加1,更新为0001H,此处为Intel语法。...CLD MOV SI, 0000H LODSB ;将字串中SI指针所指一个字节装入AL b、w、l区别?...这里只假设键盘缓冲器里没有数据,首先向0x64端口写入一个0xd1,表示开始向P2端口写入数据,紧接着向键盘输入缓冲器0x60端口写入0xdf(具体写向P2输出端口数据),其二进制表示0b11011111

45010

一个操作系统实现》笔记(1)--NASM汇编语法和环境搭建

---- 概述 实现一个基于Intel x8632位操作系统。 ---- 环境搭建 Ubuntu虚拟机。..._64 -fda a.img 配置Bochs模拟器 Bochs很强大,可以用来调试操作系统。...,比如jpeg文件格式以0xFFD8作为图像数据开始标记),则BIOS认为它是一个引导扇区。...控制权意思就是ip指针移到这个地方,CPU开始执行这里代码逻辑。到此为止,计算机不再由BIOS中固有的程序来控制,而变成操作系统一部分来控制。...TCP/IP 库提供了可移植处理Endian格式问题方法C函数。例如:htonl() 函数把一个双字(或长整形)从主机格式转换成了网络格 式。ntohl()函数执行一个相反交换。

3.8K52

从Google Fuchsia看如何实现一个跨全平台操作系统

Fuchsia是Google内部孵化出来一套新全部开源操作系统。...这套系统是一套完全不基于Linux开发系统,从它能力和目标来看,他目标是统一从高端嵌入式设备,手机,手表,汽车,平板电脑,台式电脑大一统操作系统。...ARM端 因为系统支持ARM64,这么来讲,一些低端ARMv7指令集CPU, 新操作系统不会支持。 这就非常明确了,这套系统嵌入式系统定位时中高端嵌入式设备。...简而言之就是 在用户态实现一个linuxABI,类似于Windows 里面的Posix Subsystem, OS/2 subsystem。...在疫情期间,Chromebook增长远远高于Windows系统。 微软操作系统部门,如果不做大调整,基本上会在这场大战中落败。

57410

操作系统进程实现---中---05

操作系统进程实现---中---05 内核级线程实现 核心级线程两套栈,核心是内核栈… 整个故事要从进入内核开始——某个中断开始… 切换五段论中中断入口和中断出口 switch_to难点分析 另一个故事...结构: 子进程进入A,父进程等待… 终于可以让A执行了… 小结 ---- 内核级线程实现 进程=资源+执行序列。 执行序列=线程。...进程需要进入内核执行,所以进程里面的执行序列其实就是一个内核级线程。 而所谓对资源管理,其实主要指的是对内存资源管理。 因为要实现进程,首先需要实现一个内核级线程,然后再是对内存管理。...INT 0X80实际上会去调用system_call ,因此还需要将system_call地址压入栈中,一会进入内核中后,首先弹出system_call地址,然后去执行 操作系统接口和调用–02...用栈切换,因为tss中信息可以 写到内核栈中 下面讲解是基于TSS完成进程切换过程 在一个多任务环境中,当发生了任务切换,需保护现场,因此每个任务应当用一个额外内存区域保存相关信息,即任务状态段

74860

操作系统进程实现---上---04

操作系统进程实现---04 温故知新 计算机硬件、操作系统、启动、接口… 知新 进程概念 管理CPU,先要使用CPU… 管理CPU最直观方法 多道程序、交替执行,好东西啊!...多个执行序列+一个地址空间是否实用? 开始实现这个浏览器…、 Create? Yield?...线程有有用,通过上面浏览器例子也可以看出来,线程具有下面两个特点: 共享进程资源 切换代价小 ---- 开始实现这个浏览器…、 在没讲线程之前,我们认识中一个进程同时只能去执行一个指令序列,而了解到线程存在后...操作系统一个线程对应着一个TCB(Thread Control Block),叫做线程控制模块,控制着线程运行和调度。...如果是采用用户级线程实现浏览器,那么一般一个标签页对应一个用户线程,如果其中一个用户线程阻塞,那么会导致进程切换,即当前浏览器进程失去了对CPU使用权,所以一旦一个标签卡住了,其他标签也动不了

52440

一个操作系统_10 操作系统是由中断驱动

外部中断 外部中断来自CPU外部某个硬件,因此又被称为硬件中断,比如网卡收到了一个数据包,它就会通知CPU,CPU得到通知便将数据拷贝到内核缓冲区。...软中断 软中断就是由软件主动引发中断,可以认为是主动引发,从而实现在CPU支持下实现某种功能。...比如: int 0xxx 表示进行系统调用 int3 我们用gdb 或bochs 调试程序时,实际上就是调试器fork 了一个子进程, 子进程用于运行被调试程序。...可被修复异常 比如操作系统缺页异常 终止程序异常 中断描述符 一个中断源就会产生一个中断向量,每个中断向量都对应中断描述符表中一个门描述符,任何中断 源都通过中断向量对应到中断描述符表中门描述符...不同特权级别下处理器使用不同栈,至于中断处 理程序使用是哪个栈,要视它当时所在特权级别,因为中断是可以在任何特权级别下发生

64420

操作系统概念:JAVA实现

当今操作系统如何工作?Abraham Silberschatz、Peter Baer Galvin和Greg Gagne将带你尽快了解计算机操作系统所有关键概念。...采用流行Java编程语言,此新版本以通俗易懂方式引导你全面了解操作系统理论基础,从而使你在进行更高级计算机工作时能应用到许多系统中。...《国外优秀信息科学与技术系列教学用书·操作系统概念:Java实现(第7版翻译版)》第七版重新作了更新,包括当前最新主题、应用及设计,以帮助你缩小理论与实践之间差距。...全书结合客户机一服务器模式,带你逐步学习编程主要内容。 无论你是新学Java,或是已经采用了Java,你都将欣赏Java Primer所包含富有思想内容。...版式设计使你更方便学习章节、丰富例子、编程练习等,以帮助你吸收和加强所学知识。通过这些全面的支持,你将有信心尽快进入操作系统设计世界。

1K10

操作系统文件使用磁盘实现---20

操作系统文件使用磁盘实现---20 再一次使用磁盘,通过文件使用 file_write工作过程应该就是… file_write实现 create_block算盘块,文件抽象核心 m_inode,...有了操作数据起始偏移地址,就可以根据inode中保存的当前文件对应盘块号索引,计算出当前要操作数据位于哪一个盘块中。 然后由盘块号和buf等信息形成request请求,加入电梯队列中。...---- file_write实现 首先计算是对文件进行追加操作,还是读写当前文件读写指针所处位置。...不光一个普通有数据文件叫做文件,一个设备文件也叫做文件。...如果当前inode代表一个设备文件,那么inode中保存应该是主设备号和次设备号。

24320

一个悄然成为世界最流行操作系统

Minix 介绍 Minix 是 Mini Unix 缩写,一个迷你版类 Unix 操作系统 (约 300MB)。...Tanenbaum )教授所开发一个类 UNIX 操作系统,开发初衷是方便教学使用(因为 AT&T 推出 Version 7 Unix 之后,将 Unix 源码进行了私有化)。...解释了为何他认为现有的操作系统不安全: 最严重可靠性及安全问题是与操作系统相关那些。...但事实恐怕不是我们以为那样,你可能不知道,但在英特尔近些年推出所有处理器中都运行着一个操作系统。...这就使得 MINIX 拥有至高无上地位,而且只要你电脑使用是英特尔近些年推出处理器,都有一个它在默默运行,这使得它成为名副其实世界上最流行系统。

54540

一个操作系统_13 内核宏观视角

页表项和目录项都是32bit,记录一个地址只需要20位,其余12bit用作标记位。 ?...按照内存规划,把虚拟 3G - 4G 内存映射到 物理0-1M 内存上 最后一个页目录项填入了页目录表物理地址,方便后续使用虚拟地址访问页表 涉及寄存器 CR0 0位是保护允许位PE(Protedted...; 下面将页目录项0和0xc00都存为第一个页表地址, ; 一个页表可表示4MB内存,这样0xc03fffff以下地址和0x003fffff以下地址都指向相同页表, ; 这是为将地址映射为内核地址做准备...+ 0xc00], eax ; 一个页表项占用4字节,0xc00表示第768个页表占用目录项,0xc00以上目录项用于内核空间, ; 也就是页表0xc0000000~...已经在上面通过eax赋值为0x101000,也就是第一个页表地址 add edx,4096 ; edx inc esi loop .create_pte ;创建内核其它页表

33610

一个悄然成为世界最流行操作系统

1987 今天,Minix 诞生了 Minix 介绍 Minix 是 Mini Unix 缩写,一个迷你版类 Unix 操作系统(约 300MB)。...Tanenbaum )教授所开发一个类 UNIX 操作系统,开发初衷是方便教学使用(因为 AT&T 推出 Version 7 Unix 之后,将 Unix 源码进行了私有化)。...解释了为何他认为现有的操作系统不安全: 最严重可靠性及安全问题是与操作系统相关那些。...但事实恐怕不是我们以为那样,你可能不知道,但在英特尔近些年推出所有处理器中都运行着一个操作系统。...这就使得 MINIX 拥有至高无上地位,而且只要你电脑使用是英特尔近些年推出处理器,都有一个它在默默运行,这使得它成为名副其实世界上最流行系统。

54540

操作系统操作系统结构

操作系统设计目标 操作系统设计目标可以分为两种: 1、用户目标:方便使用、容易学习、可靠、安全以及流畅等 2、系统目标:易于实现与维护、灵活,可靠、不易出错、高效等。...操作系统机制与策略 如何有效控制操作系统复杂度?...需要充分考虑高内聚和低耦合 抽象:在模块化基础上,将接口与内部实现分离。...分层:一个模块只能和同层模块以及相邻上下层模块进行交互,不能跨层交互。 层级:首先将一些功能相近模块组成一个具有清晰接口自包含子系统,然后再将这些子系统递归地组成一个具有清晰接口更大系统。...操作系统内核架构 参考资料 《现代操作系统:原理与实现》陈海波 夏虞斌等著 转载请注明来源:https://www.longjin666.top/?p=1162

2K20

WDS实现无人值守安装操作系统

qqdrsign=047b8 做AIK应答文件安装程序如下: 链接:https://pan.baidu.com/s/1VmKQqcjRQCKHsS9vchZR6w 提取码:jic8 服务器需要安装...终于成功了,在做过程中,也踩过坑。...有印象就是纠结于应答文件放在哪里,参考文档中说位置不知道是哪个,实验过两三次,终于在最后一次部署WDS服务时,添加安装映像时候吧,就下面这个界面,我改了它默认文件夹名 ?...经过测试,终于确定了,就是放在远程文件夹目录(RemoteInstall)一个子目录里: ?...还有一步就是在最后添加应答文件时,不知道该怎么添加,索性就把所有的都添加上了同一个应答文件,如下: ? 写下这些坑,给自己提个醒,也让网友们可以避免这些低级错误: ?

1.5K40
领券