操作系统
copbint
种一棵树,最好的时间是十年前,其次是现在!!<br>
有问题交流与讨论可以直接加我微信"copbint",CSDN回复非常不及时。
很多东西记了只是方便自己复习的,如果觉得没啥帮助请轻喷。
展开
-
计算机启动过程理解杂记
纯属个人理解,如有错误,请多包涵。最近在学网易云课堂——Linux操作系统, 构建自己的内核里面讲解到,计算机启动以后,BIOS会首先运行起来,然后BIOS会去磁盘的启动扇区读取数据,判断是否是引导程序(是否以55AA结尾),如果是引导程序,则加载进内存执行,引导程序会进一步加载整个操作系统。对这个过程中产生了很多疑惑。1. BIOS是怎么启动起来的?按照以前的理解,所有的程序要运行,都...原创 2019-08-23 08:52:57 · 259 阅读 · 0 评论 -
Linux操作系统, 构建自己的内核——1. 制作可以在屏幕上打印hello world的img文件
学习课程:操作系统-java1. 先写汇编:boot.asmorg 0x7c00;entry: mov ax, 0 mov ss, ax mov ds, ax mov es, ax mov si, msgputloop: mov al, [si] add si, 1 cmp al, 0 je ...原创 2019-08-24 10:26:55 · 566 阅读 · 0 评论 -
Linux操作系统, 构建自己的内核——2. 启动扇区引导其他扇区的内核
学习课程:java开发操作系统内核:让内核突破512字节的限制上一篇文章的例子,是直接在启动扇区的代码中打印内容到屏幕。一个扇区对应于512个字节,能够存储的内容太有限,必须学会在启动扇区的代码中加载其他扇区的代码。1. 启动扇区的代码boot.asmorg 0x7c00;LOAD_ADDR EQU 0X8000entry: mov ax, 0 mov ...原创 2019-08-25 00:07:22 · 352 阅读 · 0 评论 -
Linux操作系统, 构建自己的内核——3. 由实模式进入保护模式之32位寻址
这个课程讲的是怎么由实模式进入保护模式,正如文章所说,学完之后完全是云里雾里。简单记录一下自己所学,希望继续学习下去能够柳暗花明吧。课程链接:网易课程:java开发操作系统内核:由实模式进入保护模式之32位寻址CSDN博客:java开发操作系统内核:由实模式进入保护模式之32位寻址建议这个课程一定要看网易的视频,只看文章完全看不懂。1. 知识储备1) CS和IP寄存器汇编语言学习笔...原创 2019-08-25 23:49:10 · 340 阅读 · 0 评论 -
内存分段分页机制理解
现代操作系统,计算机内存是按照先分段再分页的方式管理的。注意:以下描述都是基于32位计算机进行描述的。1. 分段1) 程序直接使用物理地址的问题考虑最原始,最直接的情况,程序中访问的地址都直接对应于物理地址。这种方式有以下几个问题:1)两个使用的地址有交集的程序没法同时动行。2)写代码时,必须考虑到要运行的计算机内存大小。比如说,程序要在两台机器上运行,但是一台内存为4G,一台内存...原创 2019-08-29 08:14:30 · 4287 阅读 · 1 评论 -
Linux操作系统, 构建自己的内核——4. C语言结合汇编开发系统内核
课程链接:https://blog.csdn.net/tyler_download/article/details/52468520课程主要讲解的是如何把c跟汇编结合起来进行开发。从理论上来说,这不难,因为C要变成最终执行的二进制,中间就有编译成汇编这一个步骤。把C编译出的汇编与写的汇编结合起来不就OK了?但是实际操作起来却有各种各样的问题,归根结底还是对汇编了解太少了,出了错完全不知所措...原创 2019-09-04 08:54:01 · 702 阅读 · 0 评论 -
Linux操作系统, 构建自己的内核——5. 利用C语言绘制操作系统图像界面
课程链接:利用C语言绘制操作系统图像界面课程的目的是在屏幕上绘制一个图形界面,其实只需要往显存对应的缓冲区写入表示颜色的字符就行了。循环写入显然是一个不错的办法,用汇编写一个循环?一般人的汇编水平可能并不太够。所以作者提供的办法是先用c语言写,再反汇编成汇编代码。1. kernel.asm%include "pm.inc"org 0x9000VRAM_ADDRESS equ ...原创 2019-09-08 00:03:19 · 1421 阅读 · 2 评论 -
当一个变量占多个字节的内存时,变量的指针指向的是高地址还是低地址?
一直有一个疑惑:int a =0x01020304;如果a在内存中按如下方式存储(小端机器):100-103表示地址。int *address=&a;那么address 到底是等于100还是103呢?验证代码:test.cvoid main(){ int a=0x01020304; unsigned char* a1=(unsigned char*)(&a...原创 2019-09-08 15:20:27 · 2915 阅读 · 4 评论 -
Linux操作系统, 构建自己的内核——6.使用调色板绘制系统界面
学习课程:使用调色板绘制系统界面在上一课程中,通过往0xA0000-0xAFFFF共64KB的的显存空间写入0-255的字符,来绘制界面。0-255表示的颜色非常有限,画出来的效果很单调。利用调色板功能,能够绘制出更丰富的图案。使用调色板功能时,显存空间的每个字符不再表示颜色,而是表示颜色的下标。真正的颜色存储在一个数组中。因为一个字节最大只能表示到255,所以,表示颜色的数组最大也只能...原创 2019-09-09 08:57:01 · 501 阅读 · 0 评论 -
Operating System Concepts ——chapter 5——Process Synchronization
临界区问题硬件同步硬件指令,一个指令执行过程中,不会被中断(原子操作)TestAndSetboolean TestAndSet (boolean *target){ boolean rv = *target; *target = TRUE; return rv;}while (true) { while ( TestAndSet (&lock )); /* ...原创 2019-08-05 08:53:07 · 324 阅读 · 0 评论 -
Operating System Concepts ——chapter 6——CPU Scheduling
调度算法目标:通过多道程序设计来获得尽可能大的CPU利用率。基本算法:FCFSfirst come, first server看起来很公平,但是并不一定合理。容易导致短作业进程等待时间过长。SJFshortest job first选择执行时间最短的优先执行非抢占式如果一个作业已经在执行了,即使有执行时间更短的作业到达,依然保持已经在执行的作业,不进行抢占。抢占式如果一个...原创 2019-08-04 16:02:20 · 238 阅读 · 0 评论 -
Operating System Concepts ——chapter 1—— introduction
计算机可以分为4个组成部分: 硬件,操作系统,应用程序,用户从用户视角来看,为单个用户服务的个人电脑最重要的是易用性,性能其次,而不用关注资源使用率。 而多人接入的大型服务器则关注性能,并确保大家能平等的使用资源(cpu,内存)等。从操作系统视角来看,可以看做是一个资源分配器,分配cpu,内存,网络等资源...原创 2018-06-13 01:55:48 · 508 阅读 · 0 评论 -
Operating System Concepts ——chapter 2—— Operating System Structures
We can view an operating system from several vantage points. One view focuses on the services that the system provides; another, on the interface that it makes available to users and programmers; a th...原创 2018-06-21 01:31:15 · 903 阅读 · 0 评论 -
Operating System Concepts ——chapter 3——process
process进程:正在被执行的程序。 进程是现代分时操作系统的工作单元,包含内核进程和用户进程。 多个进程可以同时执行,cpu在不同的进程之间切换,可以使计算机更高产。3.1 process concept关于cpu正在进行的活动应该叫什么,批处理系统称之为job,分时系统称之为用户程序或任务。一般来说,process和job这两个词可以互换.进程相比于程序来说,表示的更...原创 2018-07-04 00:35:42 · 362 阅读 · 0 评论 -
Operating System Concepts ——chapter 3——threads
Threads4.1 overview线程是cpu的基本单元。包含一个线程id,程序计数器,寄存器集合和堆栈。和其他属于同一个进程的的线程共享代码区域,数据区域,和其他操作系统资源。多线程能够提升多核cpu的效率。为了能够同时处理多个任务,在多线程出现以前的方式就是多进程。多线程的优势是更节约资源,性能更高。 多线程有以下4个优势: - increaseing responsi...原创 2018-08-04 12:32:17 · 632 阅读 · 0 评论 -
vmvare虚拟机网络设置三种模式杂记
在用virtualbox安装虚拟机的时候遇到了网络配置的问题。便干脆进行了一个了解。杂记于此,作为日后继续深入学习的参照。但是网上找到的资料大都是讲vmvare的三种模式的原理,我想既然设置都差不多,原理应该也差不了太远吧。以下完全为个人理解,欢迎指错。 参考链接:VMware中Bridged、NAT、host-only三种网络连接模式的原理及其区别https://blog.c...原创 2018-08-17 01:45:41 · 175 阅读 · 0 评论 -
【ICS2015】简易调度器之CPU_state
https://nju-ics.gitbooks.io/ics2015-programming-assignment/1.3.1.html虽然明确提示,要使用匿名union,但是具体该怎么表示,还是费了一番神。最开始写出来是这样的:typedef struct { union{ union { uint32_t _32; uint16_t _16; ui...原创 2018-08-25 01:43:05 · 956 阅读 · 0 评论 -
c语言函数调用过程中栈的工作原理理解
差不多每个程序员都知道,函数调用过程,就是层层入栈出栈的过程。那么这个过程中的详细的细节是什么样子的呢?阅读了以下几篇文章之后,对整个过程基本理解了:C函数调用过程原理及函数栈帧分析阅读经典——《深入理解计算机系统》04函数返回值与栈针对自己的理解,做个记录:每个函数都是一个栈结构,有一个栈底指针ebp和栈顶指针esp。栈底指针在函数的执行过程中是不变的,栈顶指针会随着函数的执行动...原创 2018-12-04 01:08:45 · 2420 阅读 · 0 评论 -
understanding linux internals——critical data structures
sk_buff定义文件:include/linux/skbuff.h原创 2019-04-05 11:43:54 · 130 阅读 · 0 评论 -
Linux操作系统, 构建自己的内核——7. 通过响应鼠标的中断函数,让鼠标动起来
要最终能够让鼠标动起来,作者分了好几次课来讲解。成功让鼠标动起来的课程链接:系统内核的洪荒之力:挪动鼠标跟着作者讲解的步骤和代码操作,确实能够做出同样的效果,鼠标能够动起来了,感觉还是非常神奇的。但是这个过程中,更多的只是依葫芦画瓢,对相关技术的机制依然不甚了解,作者在这方面的讲解也几乎为0。但是先动起来,有个感性的认识,对于后续学习也是有帮助的。本章的学习笔记就是对代码添加了一些注释:...原创 2019-09-18 08:58:10 · 519 阅读 · 0 评论