自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 package command-line-arguments import :build constraint

因此 export CGO_ENABLED=1 之后,确保本地有 gcc 环境,没有可以下载(win 下可以下载 TDM-GCC-64 并配置 PATH 环境变量)。CGO_ENABLED 开启后,便能编译成功。是项目中使用了 CGO,然后 CGO 默认没有开启,导致无法编译。

2023-06-28 23:48:46 225

原创 【Divide_Conquer】逆序对

介绍使用分治法解决逆序对以及火柴排队问题

2022-11-30 11:46:02 341 1

原创 Linux0.11 copy_process()详解

linux0.11代码详解

2022-10-24 12:51:54 548

原创 用大白话说操作系统(十三)

**好的,OK,上次我们说到了加载根文件系统,我们可以根据根inode找到所有的文件。void init(void) { setup((void *) &drive_info); (void) open("/dev/tty0",O_RDWR,0); (void) dup(0); (void) dup(0);}我们可以看到下一行就是一个open函数,之前说过open函数使用系统调用l打开文件/dev/tty0,之后后面还有两个dup。open函数会触发0x80

2022-04-29 12:22:30 182

原创 用大白话说操作系统(十二)

上次我们讲到把进程进行fork,把大部分的东西进行复制,然后对个性化的东西进行赋值,他们分别指向不同的线性地址空间,但是指向相同的物理地址空间。写时复制fork函数只复制页表,不复制物理地址空间。这样如果只有读操作,完全没有影响,但是发生写操作的时候就会很麻烦。有写操作,再复制物理内存,就叫做写时复制。上面的逻辑是通过中断做到的,具体是缺页中断。int copy_page_tables(...) { ... // 源页表和新页表一样 this_page = *from_pa

2022-04-28 13:17:47 172

原创 用大白话说操作系统(十一)

上次我们说到进程的数据结构,现在我们需要从整体上看一下操作系统是如何进行进程调度的还记得我们之前说过操作系统要利用时钟来进行计数,发起时钟中断的中断向量号是0x20,那么时钟中断向量到底干了什么事儿呢?system_call.s_timer_interrupt: ... // 增加系统滴答数 incl _jiffies ... // 调用函数 do_timer call _do_timer将系统滴答数 jiffies这个变量+1调用do_tim

2022-04-27 20:14:16 1290

原创 用大白话说操作系统(十)

从内核态到用户态void main(void) { ... move_to_user_mode(); if (!fork()) { init(); } for(;;) pause();}之前我们已经把初始化的部分都解决了。现在看main函数中剩下的一些代码,可以看到,下一步是切换到用户模式。之前我们的代码都是在内核态,其实就是特权级很高的东西,我们可以随意的定义中断,改变分页机制,我们可以修改内核代码并且占据内存的一些地方,但是这怎么可

2022-04-27 10:22:52 107

原创 用大白话说操作系统(九)

好的,OK,心情不好就输出,操作系统真是解忧啊~~~~buffer_init(buffer_memory_end)前面我们已经把主内存区的初始化大表给建立起来了,现在就来看缓冲区的管理。extern int end;struct buffer_head * start_buffer = (struct buffer_head *) &end;void buffer_init(long buffer_end) { struct buffer_head * h = start_buf

2022-04-25 21:40:01 323

原创 用大白话说操作系统(八)

好的,OK,上次我们说到块设备请求项初始化以及如何在屏幕上显示出我们在键盘上输入的东西。下面继续看main函数中的初始化函数time_init()#define CMOS_READ(addr) ({ \ outb_p(0x80|addr,0x70); \ inb_p(0x71); \})#define BCD_TO_BIN(val) ((val)=((val)&15) + ((val)>>4)*10)static void time_init(void) {

2022-04-25 10:09:10 82

原创 用大白话说操作系统(七)

OK,好的,上次我们说到了内存和中断初始化对吧,好的,现在我们继续!读硬盘前的准备工作从开机启动开始,操作系统调用BIOS从硬盘读取数据到内存,那时候是用汇编语言写的,具体BIOS是怎么写的有机会再学,那么现在操作系统用C语言是怎么读取硬盘的呢,用户调用读写硬盘的系统调用是怎么实现的呢???读取硬盘需要块设备驱动程序涉及内存缓冲区的管理块设备请求项的初始化blk_dev_init();main函数中有上面一行代码void blk_dev_init(void) { int i;

2022-04-24 10:34:10 85

原创 用大白话说操作系统(六)

好的,OK,我们用前面的几个部分把操作系统汇编语言的部分说完了,终于来到C语言的世界,心心念念的main函数,我终于来了,我从没这么期待main函数的到来,虐惨了555~然后我们进入到main.c的main方法当中。void main(void) {//参数的取值和计算 ROOT_DEV = ORIG_ROOT_DEV; drive_info = DRIVE_INFO; memory_end = (1<<20) + (EXT_MEM_K<<10);

2022-04-23 09:51:34 122

原创 用大白话说操作系统(五)

好的,OK,今天终于来到了高级语言的世界,操作系统的旅途又看到新风景了,日日新,我们废话不多说,现在开始!开启分页机制上次我们在head.s中重新设置了gdt和idt。然后开启分页机制并跳转到main函数jmp after_page_tables...after_page_tables: push 0 push 0 push 0 push L6 push _main jmp setup_pagingL6: jmp L6如何开启分页机制

2022-04-22 09:45:54 517

原创 用大白话说操作系统(四)

好的,OK,上次我们说到操作系统模式的转换,有一个gdt全局描述符表,段寄存器里面存储着段选择子,到gdt中找到段基址【全局描述符表通过gdtr找到它自己在内存中的位置】,这只是进入保护模式的一个准备工作,接下来我们看另一个准备工作。mov al,#0xD1 ; command writeout #0x64,almov al,#0xDF ; A20 onout #0x60,al在setup.s中有这样一段代码,他的意思是打开A20地址线。打开A20地址线就是说,突

2022-04-21 19:51:48 439

原创 用大白话说操作系统(三)

Hello,大家好!今天我们继续接着上回的来说。上回说到操作系统把需要的bootsect.s从硬盘挪到了0x7c00又挪到了0x90000,接着把setup.s从硬盘挪到了0x90200,head.s和其他的数据从硬盘挪到了0x10000。而且我们把bootsect.s已经解释完了。OK,接下来又有哪些有趣的操作呢?在setup.s中可以看到如下的代码。start: mov ax,#0x9000 ; this is done in bootsect already, but... m

2022-04-21 19:05:30 411

原创 shell脚本学习笔记(二)

好的,现在接着上次的地方学,上次学习了shell语法最基础的部分,这次同样也是最基础的,只要勤加练习就能熟练掌握!最近废话有点多哈哈,话不多说,现在开始。echo命令echo用于字符串的输出。echo "hello world"echo "\"hello world\"" #显示转义字符,用双引号name = "zhangsan"echo "$name hello world"echo -e "OK! \n" #显示换行echo "hello world"echo -e "hello w

2022-04-03 11:15:26 74

原创 shell脚本学习笔记(一)

OK,今天我终于来学脚本啦,之前都是半途而废了,现在希望能够坚持记笔记学下去哈哈哈~好的,废话不多说,我开始啦!一、关于shellshell是壳的意思,顾名思义是套的操作系统外面的壳,由于不能直接操作内核,用shell来调用操作系统完成一些命令。新建文件用.sh结尾vim helloworld.sh#! /bin/bashecho 'hello world'【第一行】固定套路,表示这是一个脚本文件【第二行】输出一个字符串赋予这个文件执行权限chmod ug+x helloworld

2022-04-02 18:37:31 1228

原创 用大白话说操作系统(二)

咱们上次说到,操作系统启动后把开始512字节数据从硬盘加载到内存0x7c00的地方,又移动到0x90000的位置,那么这么做之后是要干啥呢?我们接下来就来说道说道!jmpi go,0x9000这个jmpi啥意思捏。是一个段间跳转指令,就是说 我要以0x90000为基址,找到偏移量为go的位置,大家都知道吧,代码一般都是代表偏移量的,所以需要一个基址。【这时候cs赋值为0x90000,ip赋值为go】cs是代码段基址寄存器,ip是指令指针,现在程序运行指向的位置go: mov ax,cs

2022-03-31 09:39:18 226

原创 用大白话说操作系统(一)

好的,今天开始就用普通人的大白话聊两句操作系统相关的内容。导论咱也不管操作系统是啥玩意儿了,用过电脑的都知道吧,就是平常说的windows,mac,linux知道一个就行了,咱们从今天起就把这玩意从内到外扒拉一遍儿。有时候可能懒得画图,大家见谅,话不多说,咱们现在开始。启动时我在干嘛大家好,我是Linux操作系统,今天我想说说我是怎么呼吸第一口空气的(狗头)。现在我还是一张白纸,我要执行程序,但是内存上并没有数据,555~谁能帮助我呢?哪位好心人能帮帮我?大家都知道主板上有一个写死的固件程序BIO

2022-03-30 19:49:34 790

原创 快速排序详解

快速排序下面介绍使用递归的快速排序算法。递归三部曲:1)确定返回类型和参数2)确定终止条件3)确定单次递归逻辑对于单次的递归需要输入参数是数组nums,起始位置l,终止位置r。终止条件是l>=r确定每次排序的哨兵,这里选取每一部分的第一个数字作为哨兵,如何确定这个数字的位置呢?我们需要另外一个函数partition来确定对于partition()来说,完成的是局部的排序,返回的是局部排序后该局部哨兵排序之后的位置。int partition(vector<int>n

2022-03-29 11:06:46 583

原创 lamport面包店算法详细讲解及代码实现

lamport面包店算法详细讲解及代码实现1 算法详解1.1 一个较为直观的解释1.2 Lamport算法的时间戳原理1.3 Lamp算法的5个原则1.4 一个小栗子2 算法实现功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入1

2021-11-06 16:11:55 5577

原创 分布式文件系统——GFS

大数据存储重要手段:超大规模分布式文件系统GFS提供了海量非结构化信息的存储平台,并提供数据的冗余备份,成千台服务器的自动负载均衡以及失效服务器检测文件系统文件系统时操作系统用于明确存储设备或分区上的文件的方法和数据结构,在存储设备上组织文件的方法。GFS设计原则1.采用大量商业PC来构建存储集群,PC的稳定性并没有很高的保障,部分错误不再被当做异常,而是将其作为常见的情况加以处理2.存储的文件大多是大文件,对大文件的读写操作进行优化。3.存在大量的“追加写”操作,已经写入的基本不做操作。很

2020-12-06 15:27:23 694

原创 批处理计算框架MapReduce

批处理计算框架MapreduceMapreduce由Goole于2004年提出的,不仅是一种分布式计算模型,而且也是一整套构建在大规模普通商业PC之上的批处理计算框架。批处理计算大容量静态数据集,计算完成后返回结果。特征如下:有界——数据的有限集合;持久——数据始终存储在某种存储类型的持久存储位置中;大量——极为海量的数据集Mapreduce分而治之的思想 Jeff Dean Goole MapReduce架构设计师提出计算模式1.求和模式wordcount: 统计每个

2020-12-05 19:10:04 1373

原创 I/O系统(一看就懂)

输入输出系统I/O系统基本概念与I/O接口1.早期:分散连接 CPU和I/O串行工作 程序查询方式2.接口模块和DMA阶段总线连接 CPU和I/O并行工作 采取中断方式和DMA方式3.具有通道结构的阶段4.具有I/O处理机的阶段重要概念:I/O接口是指主机和外设的交接部分,也称作设备控制器,设备适配器。这时候我才指导原来设备适配器就是所谓的I/O接口。位于系统总线和外设之间。作用是控制并实现主机和外部设备的数据传送。I/O接口的功能与基本结构这里再说一下接口的主要功能

2020-12-03 14:45:25 830

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除