- 博客(38)
- 收藏
- 关注
原创 一个简单http_server的实现(1)
我的博客:startcraft.cn最近在学习网络编程的知识,所以准备实现一个http服务器,写博客来记录一下学习的过程RIORIO是csapp中提到的一个健壮的I/O包,为什么要使用这个来进行文件的读写,是因为接下来的socket编程中不适合使用c标准I/O先贴出Rio包的实现#ifndef __RIO_H__#define __RIO_H__#include <http_server.h> #define RIO_BUFSIZE 8192//缓冲区的大小struct ri
2020-06-10 00:29:15
274
原创 从零实现一个操作系统-day14
我的博客:startcraft虚拟内存管理startcraft虚拟内存就是对每一个进程而言,对它来说它认为它独占所有4G内存,进程内的地址就是以这4G的虚拟内存来表示的,当要执行时,cpu通过分段机制和分页机制将虚拟地址转换成物理内存地址进行访问。同时一个进程也不是所有的页都在内存中,只有部分在内存中,当需要的页不在内存时产生一个缺页中断,然后进行调度,将需要的页调入内存仿照linux的设计,对于一个进程的4G虚拟空间3G-4G的空间给系统内核,0-3G给用户程序,现在要将内核映射到虚拟地址空间的3
2020-05-28 19:33:43
534
原创 从零实现一个操作系统-day13
我的博客startcraft物理内存管理由于之前采用了平坦模式,也就是整个内存一段,所以这里就不用管段的处理了。分页参考:https://www.cnblogs.com/peterYong/p/6556619.html#_label8分页就是将主存,程序执行的线性地址空间,还有外存都在逻辑上划分位固定大小的块,这样的好处是降低内存碎片的影响,每一页的大小不能太大,也不能太小,x86采用的是一页4KB,4GB的主存就可以分为2^20个页对存储空间进行逻辑划分之后,寻址时就要由相应的映射,对于每一个
2020-05-16 01:20:50
371
原创 从零实现一个操作系统-day12
我的博客:startcraft中断控制芯片的初始化参考:https://blog.csdn.net/longintchar/article/details/79439466中断控制芯片8259A由主从两个芯片级联而成从片的输出接在主片的IRQ2上,所以一共可以接受15个设备的中断信号,中断控制芯片的作用就是管理外接设备的中断首先要对芯片进行初始化,初始化该芯片就是初始化一组寄存器ICW寄存器当地址线的A0=0时主片的端口的0x20,从片的端口是0xA0ICW1首先设置ICW1,ICW1寄
2020-05-13 01:25:58
629
原创 从零实现一个操作系统-day11
我的博客startcraftIDT昨天弄完了GDT,今天来弄IDT,IDT就是中断描述符表。和GDT类似。中断就是一个电信号,它可以打断cpu当前的操作,让cpu执行你指定的中断处理函数,等执行完,cpu会回去继续执行它之前的操作,就像你移动鼠标,就是产生了一个中断,让cpu先帮你移动鼠标。既然打断cpu让他执行你指定的中断处理函数,那么中断就是有编号的,让cpu知道应该执行哪一个中断处理函数,intel的处理器支持256个中断,也就是有0-255个中断编号和GDT一样,有中断描述符,大小为8字节
2020-05-09 01:52:50
240
原创 从零实现一个操作系统-day10
我的博客:startcraft保护模式保护模式是从80386时代引入的,之前的8086只有实模式,实模式有1MB的寻址空间(2 ^ 20),而保护模式有4GB的寻址空间,且支持分页等操作保护模式对内存段的访问做了限制,对于内存段的性质和允许的操作给出了定义,所以每一个段有一个段描述符,占8个字节,段描述符有很多,只能放在内存里,其中最重要的全局段描述符表(GDT),GDT的相关信息存在cpu...
2020-05-07 01:30:59
142
原创 从零实现一个操作系统-day9
我的博客startcraft调试配置昨天写完printk函数后很有可能遇到bug,当遇到bug的时候怎样来调试呢,现在就来配置一下gdb调试qemu可以以调试模式启动配合gdb来进行调试,当然cgdb更加好用一些qemu的调试模式命令是qemu -S -s -fda floppy.img -boot a-S是让qemu不要继续运行,等待gdb的运行指令,-s是开启1234端口等待g...
2020-04-30 02:19:41
292
原创 从零实现一个操作系统-day8
我的博客startcraft实现简易版的printf函数屏幕的输入输出函数主要的功能还是dubug,我们模仿标准库来实现,标准库的printf基于vsprintfint vsprintf(const char *format, va_list arg)先看看printk的内容void printk(const char *format, ...){ // 避免频繁创建临时变量,内...
2020-04-29 01:44:59
201
原创 从零实现一个操作系统-day7
我的博客startcraft字符串函数因为在内核中,大部分的c标准库函数无法使用,字符串操作的函数又比较常用,所有自己实现一些include/string.h#ifndef INCLUDE_STRING_H_#define INCLUDE_STRING_H_#include "types.h"void memcpy(uint8_t *dest, const uint8_t *sr...
2020-04-25 01:46:15
122
原创 从零实现一个操作系统-day6
我的博客startcraft昨天写的内核在屏幕上没有我们输出的东西,今天就来想办法显示点什么文字的显示要显示东西就涉及到显卡了,显卡有两种模式,文本模式和图形模式,现在基本都是图形模式用得多,但是我们这个就用文本模式了,毕竟不涉及ui啥的文本的显示规则显卡通电后就自动初始化了80\ * 25分辨率的文本模式,即一屏25行,一行80个字符之前说过内存地址空间不是全部映射到主存的,有一部分...
2020-04-23 02:06:57
290
原创 从零实现一个操作系统-day3
我的博客 startcraft.cn链接器脚本第一天的链接器脚本我们没有看懂,今天就来把它弄清楚吧,先把脚本代码弄过来/** kernel.ld −− 针对 kernel 格式所写的链接脚本*/ENTRY(start)SECTIONS{ /* 段起始位置 */ . = 0x100000; .text : { *(.text) . = ALIGN(4096);...
2020-04-19 02:47:16
173
原创 从零实现一个操作系统-day2
我的博客: startcraft.cnkeywords: 操作系统今天主要是对操作系统的启动进行学习,因为都是理论的部分,这篇博客就当学习的笔记了计算机的启动过程BIOS首先在按下电源键后计算机首先读取写在ROM中的BIOS(Basic Input/Output System 基本输入输出系统)它保存着计算机最重要的基本输入输出的程序,其主要功能是为计算机提供最底层的、最直接的硬件设...
2020-04-18 00:50:43
211
原创 从零实现一个操作系统-day1
我的博客: startcraft.cn目的从这次春招中的碰壁和各种感悟,深刻体会到自己基础知识的不足,从零实现一个操作系统可以帮助自己更好得了解操作系统的知识。自己很早之前就开始有写一个微型操作系统的想法,之前也实践过,但弄了几天就放弃了,发现自己的毅力太差了,其实就是太懒了,写blog的目的也有敦促自己,不要懈怠。资料感谢前辈们无私提供的各种教程,这系列blog(希望是系列)跟着hurl...
2020-04-17 01:44:45
362
原创 codeforces-1182-E-Product Oriented Recurrence(矩阵快速幂+欧拉降幂)
我的博客上篇博客就是在写这篇题解的时候发现公式预览不好用弄出来的23333题目链接:https://codeforces.com/contest/1182/problem/E题目大意:定义一个函数fx=c2x−6∗fx−1∗fx−2∗fx−3f_x=c^{2x-6}*f_{x-1}*f_{x-2}*f_{x-3}fx=c2x−6∗fx−1∗fx−2∗fx−3 for x≥4x\g...
2019-09-25 21:16:04
272
原创 vim-instant-markdown显示mathjax公式
我的博客问题背景:今天在用vim写markdown,装了vim-instant-markdown预览,但是我发现它不能显示MathJax的公式,于是开始了找原因的旅程首先要确认该插件是否支持显示mathjax的公式,于是我去了该插件的github主页,发现它是支持的,只需要在.vimrc里加上let g:instant_markdown_mathjax = 1就行了.但是我加了之后还是...
2019-09-25 20:04:24
692
1
原创 2019-ICPC-Shanghai-online-J-StoneGame
题目链接 https://nanti.jisuanke.com/t/41420题目大意给你一些石头,让你选一些石头重量大于剩余的重量,且去掉任意一个你选的石头之后总重量小于等于剩余重量思路将石头按从大到小排序,然后遍历选取,以当前的石头为最小值,也就是当前的石头一定要选,比它大的可选可不选,比它小的一定不选然后就是背包问题了,dp[j]代表选择石头的总重量为j的方案数,判断一下j合不合法...
2019-09-17 19:10:43
207
原创 2019CCPC-江西省赛 Cotree(HDU-6567)
博客地址:https://startcraft.cn题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6567题目大意给你两棵树,让你在两棵树之间加一条边,使得两棵树联通且任意两结点之间的距离之和最短就是最小化这个式子∑i=1n∑j=i+1ndis(i,j)\sum_{i=1}^n\sum_{j=i+1}^ndis\left(i,j\righ...
2019-07-23 16:22:54
412
原创 2019CCPC-江西省赛 Wave(dp)
蒟蒻的博客:https://startcraft.cn题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6570题目大意:给你长度为N,1≤N≤1000001\leq N\leq1000001≤N≤100000的一个数组,其中元素在[1,c]1≤c≤100[1,c] 1\leq c\leq 100[1,c]1≤c≤100之内,求一个最...
2019-07-22 21:34:12
342
原创 2019牛课多校第二场F
本蒟蒻的博客:https://startcraft.cn题目链接:https://ac.nowcoder.com/acm/contest/882/F题目大意:有2N个人,任意两个人之间有一个竞争值,将这2N个人分成两组,每组N个人,只有在不同组的两人之间才计算他们的竞争值,问可以获得的最大竞争值是多少。1≤N≤141\leq N \leq 141≤N≤14思路暴力枚举,一共有C2814=...
2019-07-22 20:53:27
155
原创 线段树扫描线
我的博客:http://startcraft.cn矩形面积并如图,考虑求图中矩形的面积并这个问题可以转换成求下图中这写部分的面积就是从下网上扫一遍,遇到矩形的下边就加入,然后统计当前的线段长度,当然重叠部分的线段只算一次长度,遇到上边就删除,然后每种颜色的矩形面积就是 当前线段长度(将要加入的线段的高度-上一条加入的线段的高度)*然后这些累加起来就是矩形的面积并现在的问题就是如何...
2019-05-29 15:14:19
135
原创 HDU-1540线段树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1540题目大意:一些村庄排成一排,编号1-N,只要中间没有被摧毁的村庄,两个村庄就算是连接在一起的,现在有三个操作1.摧毁编号为X的村庄2.询问与村庄X连接的村庄有几个3.重建上一个被摧毁的村庄思路我们只要知道查询的村庄X它的左边最近的一个被摧毁的村庄和它右边最近的一个被摧毁的村庄就可以...
2019-04-27 20:13:56
89
原创 HDU-4027 线段树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4027题目大意:给你一个初始序列a[i],然后有两个操作,一个是询问区间的和,一个是将区间里的每一个数变为原来的平方根,向下取整。操作数<=100000思路给定的数初始最大为\(2^{63}\),那么我们最多取6次平方根就可以将其变为1,变成1之后不管怎么取都是1,所以考虑使用线段树维护一...
2019-04-27 16:44:40
120
原创 ST表详解
本蒟蒻的blog:https://startcraft.cnST表概述ST是解决区间RMQ(区间最值)问题的一种数据结构,它不支持在线修改,预处理\(O(nlogn)\),查询\(O(1)\)实现以区间最小值为例子预处理\(ans[i][j]\)表示区间\([i,i+2^{j}-1]\)的最小值,同时它可以表示成前半个区间的最小值和后半个区间的最小值前半个区间是\([i,i+2{j-...
2019-04-25 21:42:58
424
原创 线段树
本博客同步更新至 https://startcraft.cn介绍线段树的应用场景在区间修改和区间查询上,修改和查询的时间复杂度都为O(log n)线段树如它的名字一样将区间分成一段一段的,如123456789这一串数字,以区间求和为例{% qnimg seg_tree1.png %}上图就是构建的线段树,其中结点里的值是该结点表示的区间的和,中括号里的数字代表表示的区间实现(以区间求...
2019-04-21 22:06:17
167
原创 2018南京区域赛J题(计算贡献)
本博客同步更新至:https://startcraft.cn题目链接:https://codeforces.com/gym/101981/attachmentsGiven a suqence of n integers \(a_{i}\)Let \(mul(l, r)\) = \(\prod ^{r}{i=1}\)and\(fac(l,r)\)be the number of distinc...
2019-04-11 22:40:58
289
原创 UVA-11426(欧拉函数)
我的博客:https://startcraft.cn题目VJ链接:https://vjudge.net/problem/UVA-11426题目大意:求这个G=0;for(i=1;i<N;i++)for(j=i+1;j<=N;j++){ G+=gcd(i,j);}\(1<N<4000001\)思路:这是一个计算贡献的题,首先考虑两个数\(a,b\)...
2019-04-01 19:18:15
218
原创 lightoj-1282 快速幂+数学
VJ题目链接:https://vjudge.net/problem/LightOJ-1282题目大意给你两个数(n,k)(n,k)(n,k),(2≤n≤231)\left( 2\leq n\leq 2^{31}\right)(2≤n≤231),(1≤k≤107)\left( 1\leq k\leq 10^{7}\right)(1≤k≤107)让你求nkn^{k}nk的前三位数和后三位数思路...
2019-03-29 19:20:01
158
原创 二分图匹配(匈牙利算法)
二分图的性质和一些名词二分图的定义:一个图中的点可以分成两个不相交的集合\(A,B\),并且图中所有的边都是从一个集合连向另一个集合,即同一个集合中的点之间没有边,如图1就是一个二分图{% qnimg Hungarian Algorithm1.png %} 图1 匹配:图论中,一个「匹配」(matching)是一个边的集合,其中任意两条边都没有公共顶点,如图2中红色的边就是一个匹配{% ...
2019-03-27 22:25:00
184
原创 codeforce-1136-D(546-D)
我的博客链接:https://startcraft.cn题目链接:https://codeforces.com/contest/1136/problem/D题目大意:给你1-n的n个数,给出一个序列,序列由这n个数组成,然后给m对数u,v,一对数u,v代表在序列中如果u和v相邻,且u在v的左边,则可以交换这两个数,现在问你序列中的最后一个数最多可以向左移动几次思路:设序列中最后一个数为...
2019-03-13 22:39:58
199
原创 HDU_1028题解(DP)
我的博客链接 https://startcraft.cn题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1028题目大意给你一个数字N,问将N分解成若干个数字的和有几种方法,每个数字都是正数且不超过N如:4 = 4;4 = 3 + 1;4 = 2 + 2;4 = 2 + 1 + 1;4 = 1 + 1 + 1 + 1;思路1:考...
2019-03-09 21:14:11
330
原创 Dinic 最大流
我的博客地址: https://startcraft.cn概述dinic算法是网络流中的一种算法,这里拿来求最大流所谓最大流就是一个网络中的最大流量,如下面这个图片其中A称作源点,B称为汇点,边上的数字代表这条边最多能容纳多大的流量,所以上图的最大流量为12dinic算法就是求最大流算法的一种反向边概念大部分网络流的算法都会在建边是建立一条反向边,初始权值为0,可以理解为给算法后...
2019-03-06 21:53:03
567
1
原创 牛客网2019寒假算法训练营day2_H
我的博客地址: https://startcraft.cn链接:https://ac.nowcoder.com/acm/contest/327/H来源:牛客网处女座的测验(一)时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言524288KSpecial Judge, 64bit IO Format: %lld题目描述处女座进行了一场c语言的考试...
2019-03-06 21:44:54
235
原创 牛客网2019寒假算法训练营day1_G
我的博客地址: https://startcraft.cn链接:https://ac.nowcoder.com/acm/contest/317/G来源:牛客网小a的排列时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K64bit IO Format: %lld题目描述小a有一个长度为n的排列。定义一段区间是"萌"的,当且仅当把区间中各个...
2019-03-06 21:42:41
261
原创 codeforcr1130D
我的博客地址 :https://startcraft.cn题目链接:http://codeforces.com/contest/1130/problem/D2题目大意:有N个车站围成一个圆,火车按顺时针走,车站编号1-N,然后车站可能有人要去往某个车站,每次列车在一个车站只能带一个人,问你火车分别以1-N的车站为起点,最少需要多少时间把所有人带到目的地,火车花费一单位的时间从一个车站到另一个。...
2019-03-06 21:38:04
209
原创 AC自动机
概述AC自动机的目的是实现多模式串的匹配,即在一个主串中查询多个模式串AC自动机是在trie(字典树)树的基础上实现的对于一个主串,将这个各个模式串插入字典树,然后进行fail指针的生成fail指针的生成是AC自动机的关键fail指针顾名思义就是在匹配失败时使用的,在匹配失败时下一步就是去fail指针指向的结点,避免了多次匹配造成的时间浪费构建字典树struct NODE{ in...
2019-03-06 21:26:55
165
原创 最小生成树——prime算法
最小生成树的prime算法是以点为核心来进行计算.原理:从一个点开始遍历它到其他所有点的距离,无法直接到达的距离为INF,记录为mindis数组如:一共有四个点ABCD 五条边A——B 2; A——C 1; A——D 3; B——C 4; C——D 2;选取A为第一个点,那么mindis数组中的值为0,2,1,3;...
2018-04-24 20:36:43
1065
原创 存图方法——链式前向星
常见的存图的方法有邻接矩阵但是如果数据过大的话二维数组开不下,这就需要换一种存图的方法,这里介绍链式前向星链式前向星的结构由两部分组成第一部分 是一个结构体typedef struct{ int the_end;//边的结尾(默认为0,若边从0开始则需要初始化为-1) int w;//边的权值 int next;//下一条边在edge数组中的下标}E...
2018-04-23 22:21:58
352
原创 关于c语言中double指针的初始化问题
今天在写一到题目时遇到了一些double类型指针的问题当定义double*a;时编译给了waring,说是没有给指针初始化,而定义int*a;则不会出现此问题。然后我就去初始化,刚开始理解错了,用了*a=123;来初始化,继续waring,然后明白要初始化的是指针,最后给指针赋了初始地址值没waring了。
2017-10-21 22:34:09
4676
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人