八. 内存池规划

bitmap简介计算机中一些资源的数量非常庞大,比如内存容量和硬盘容量。为了使用这些资源,必须涉及到一套管理这些资源的方法,而方法中必须要构建数据结构来存储管理数据,这些数据本身也是需要占用内存的计算机中最小的单位是位,那么用一组二进制位串来管理其他单位大小的资源是很自然的,这组二进制位中的每一位与其他资源的数据单位是一一对应的关系,这实际是一种映射关系,于是这组二进制位便有了一个名字—-位图位图与
分类: 其他 发布时间: 05-25 23:40 阅读次数: 4

十. 内核线程

实现线程函数观察一下这段c语言代码 void threadFunc(void *arg){ printf("thread function\n");}int main(){ printf("main function\n"); _beginthread(threadFunc, 0, NULL); return 0;} 这里只是举个简单的例子,没有考虑错误处理和资源回收。在
分类: 其他 发布时间: 05-25 23:40 阅读次数: 3

十一. 线程同步

乱序输出前面完成了多线程之后,那么肯定会涉及到线程的同步问题。因为线程的执行是随机的,乱序的。虽然我们这个小kernel实现的调度器算法比较简陋,它的随机性没那么强,但是每次进行线程切换的时候,还是有可能产生问题。并且问题已经产生了。int main(void) { put_str("I am kernel\n"); init_all(); thread_start("thr
分类: 其他 发布时间: 05-25 23:39 阅读次数: 4

十三. 实现系统调用

系统调用简介关于系统调用前面有过简单的介绍,这里将真正实现系统调用现代的操作系统中,用户的权限是有限的,它不能随意的访问系统中的资源。操作系统屏蔽了用户直接访问硬件的能力,这样做的原因主要是为了安全考虑。但是如果我们想控制显卡打印字符怎么呢,那就需要通过操作系统提供的接口来完成了,我们调用操作系统提供的接口,然后操作系统去操控硬件,比如说这里的显卡,打印出字符来。我们使用的c语言里面的printf函
分类: 其他 发布时间: 05-25 23:39 阅读次数: 4

十二. 实现用户进程

TSS单核CPU想要实现多任务,唯一的方案就是多个任务共享同一个CPU,也就是让CPU在多个任务间轮转。CPU执行任务时,需要把任务运行所需要的数据加载到寄存器、栈和内存中,因为CPU只能直接处理这些数据,这是CPU在设计上就直接决定的。任务的数据和指令是CPU的处理对象,任务的执行会占用寄存器和内存。内存相对于CPU来说是低速设备,里面的数据往往被加载到高速寄存器之后被CPU处理,再将结果写到内存
分类: 其他 发布时间: 05-25 23:39 阅读次数: 4

malloc&free

之前的内容中已经实现过内存分配的功能,但之前的内存管理模块中只是实现了内核空间的内存分配,而且每次分配的空间都是已页为单位,也就是只能分配页的整数倍的空间。已页为单位的内存确实是最利于操作系统管理的,但是当只需要小块内存区域的时候,之前的内存管理模块就无法完成了。所以在这里要完善之前的内存管理模块,使其能够支持小块内存的分配。有了底层的内存管理模块的支撑之后,malloc和free的实现就非常容易...
分类: 其他 发布时间: 05-25 23:39 阅读次数: 5

filesystem

磁盘的基础概念 扇区:它是磁盘读写的基本单位。在我们个人的pc上,他的大小通常为512byte 块:在windows中,称为簇。一个块由多个扇区组成,磁盘在进行读写数据的时候,不可能有一扇区的数据就读或写一次,而是等数据累计到一定量后,在统一进行读写,而这个数据量就叫块。在对磁盘进行格式化分区的时候可以选择块的大小,默认的是4kb。因为每次进行读写的数据量都是一块为单位,所以在磁盘上数据的存储...
分类: 其他 发布时间: 05-25 23:38 阅读次数: 4

filesystem2

在前面一节中介绍了文件系统的基本概念,接下来就要准备开始实现我们的文件系统,下面是为管理文件系统提供的几个基础数据结构。 超级块的结构 /* 超级块 */ struct super_block { uint32_t magic; // 用来标识文件系统类型,支持多文件系统的操作系统通过此标志来识别文件系统类型 uint32_t sec_cnt; ...
分类: 其他 发布时间: 05-25 23:38 阅读次数: 3

filesystem3

文件描述符 在之前介绍的概念中,inode是用来表示一个文件的,用于描述文件的存储信息,文件的权限等。但这个inode结构是操作系统为自己的文件系统准备的数据结构,仅供其内部使用,与用户的关系不大,接下来要介绍的文件描述符才是用户能够使用的结构。 在linux系统中,读写文件的本质是先通过文件的inode找到文件数据块的扇区地址,随后对这些扇区的数据进行读写,从而实现了文件的读写。 对用户进...
分类: 其他 发布时间: 05-25 23:38 阅读次数: 4

十八. 文件系统四(文件的读写与删除)

写入文件 文件的数据都是记录在inode中的文件块中,在该文件系统的设计中,只用了12个直接块和一个间接块来存储文件,所以一个文件最大可以存放 140 * 512字节的数据。 写文件的过程对文件块和扇区的分配过程,根据当前要写入的数据量大小,来判断是否需要分配新的数据块。如果12个直接块不够存储该数据,就分配间接块来存储,当所需的数据块分配好了之后,就会逐块的往硬盘上写入数据,知道所有的数据被...
分类: 其他 发布时间: 05-25 23:38 阅读次数: 2

shell1

路径解析转换 路径有绝对路径和相对路径之分,在平常使用linux的过程中,我们在输入命令和参数的时候,往往使用的都是相对路径。相对路径是基于当前的工作路径的出的。 当前工作路径 + 相对路径 = 绝对路径 比如说当前工作路径为 /home/work 此时输入 ls file,那么file所在的绝对路径就是 /home/work/file 了。 因为这个kernel比较简单,如果路径以根目录...
分类: 其他 发布时间: 05-25 23:37 阅读次数: 4

记2018.2.27 NOIP班-数据结构(9)

t1: 题意简述:给你 nnn 个线性函数 fi=kix+bifi=kix+bif_i=k_i x+b_i,支持单点修改和区间查询 fr(fr−1(⋯fl(x)⋯))mod (109+7)fr(fr−1(⋯fl(x)⋯))mod (109+7)f_r(f_{r-1}(\cdots f_l(x)\cdots )) \bmod\ (10^9+7)。 然后看了题目...
分类: 其他 发布时间: 05-25 23:36 阅读次数: 3

python计算机基础

1、什么是编程语言? 程序员与计算机沟通的介质。 2、什么是编程? 程序员基于某种编程语言的语法让计算机做自己想做的事情,结果就是一堆文件。 3、为什么要学编程? 让计算机代替人类工作,成为人类的奴隶。 4、计算机的五大组成与作用,cpu的组成 ①控制器:计算机的控制中心,相当于人类的大脑。 ②运算器:运行算术运算和逻辑运算的部件。 ③存储器:用来保存计算机的数据与程序的部件。分别为主存(内存条)、外存(磁盘、USB内存卡)。 ④输入设备:帮助计算机输入的设备有键盘、鼠标。 ⑤输出设备:帮助计
分类: 其他 发布时间: 05-25 23:36 阅读次数: 3

012 BeanPostProcessor

一 . 概述   在前面我们说过spring为我们提供了各种初始化时的回调方式,对于我们来说最为重要的就是BeanPostProcessor这个接口. 二 .BeanPostProcessor public interface BeanPostProcessor { Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException; Object
分类: 其他 发布时间: 05-25 23:36 阅读次数: 4

MySQL-5.6.36-多实例-部署(编译版)

MySQL多实例_沁贰百科 注:部署双实例前,首先需要部署单实例,单实例部署详情如下: https://www.cnblogs.com/wangqiner/p/9081002.html 1、如已经安装完成单实例,需要先停止单实例运行,接下来进行多实例部署 /etc/init.d/mysqld stop chkconfig mysqld off 2、已经制作好多实例配置文件及启动文件,以下为下载地址: 3、上传data.tar.gz到根目录,然后tar解压 [root@centos /]#
分类: 其他 发布时间: 05-25 23:36 阅读次数: 5

PHP+Apache2.x+phpMyAdmin安装和配置

1>各个部件的下载 目前在windows下开发 PHP官网下载地址:https://windows.php.net/download PHP有TS(ThreadSafe)和NTS两个版本,所以按照PHP的提示,如果你使用IIS作为FastCGS开发就用NTS,因为FastCGI是单线程。如果想用apache2.x serviceAPI,就使用TS版本。 Apache2.x下载直接点击"Apache Lounge"。 phpMyAdmin的官网地址:https://www.phpmyadmin.
分类: 其他 发布时间: 05-25 23:36 阅读次数: 4

fopen打开文件失败的问题

fopen打开带中文路径或含中文名称的文件失败。 解决这个问题有两个方法:一是改用_wfopen,这个函数接受两个宽字符类型,函数原型如下: FILE* _wfopen(const wchar_t* filename, const wchar_t* mode); 参数一表示文件名,参数二表示打开模式,返回文件描述符 第二种方法还是用fopen,这种方式文件名称编码需要与系统保持一致。 fopen是C标准库的一个函数,函数内部是系统调用。Windows中调用CreateFile;Linux中调用
分类: 其他 发布时间: 05-25 23:36 阅读次数: 4

opencv安装-ubuntu18.04

opencv安装 opencv安装报错: In file included from /usr/include/host_config.h:50:0, from /usr/include/cuda_runtime.h:78, from <command-line>:0: /usr/include/crt/host_config.h:121:2: error: #error -- unsupported GNU version!
分类: 其他 发布时间: 05-25 23:36 阅读次数: 12

Qt编写websocketpp客户端

1、下载websocketpp,地址为https://github.com/zaphoyd/websocketpp,版本为0.7。 2、下载boost,地址为https://www.boost.org/,版本为1.6.3。 3、说明:websocketpp并不是必须需要boost,如果C++编译为C11以上,是可以不用的。 4、Qt创建一个console工程(如:websocketClient),将下载下来的websocket_master里面的websocket文件夹放到该工程目录下,在we
分类: 其他 发布时间: 05-25 23:36 阅读次数: 3

python基本数据类型(—)

数字 int(整型)   在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647   在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807 布尔值   真或假   1 或 0 字符串 1. s. capitalize() ---- 首字母变大写  1 s="lifei" 2 print(s.capitalize())  -
分类: 其他 发布时间: 05-25 23:36 阅读次数: 4