自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 GO的GMP调度模型(上)

(本文所有代码都基于Go的1.13.5版本)为什么说Go的调度是轻量的?从进程线程协程的简单区别开始说起:进程:系统进行资源分配的基本单位,有独立的内存空间。线程:线程是 CPU 调度和分派的基本单位,线程依附于进程存在,每个线程会共享父进程的资源。协程:**用户态的轻量级线程,**协程的调度完全由用户控制,协程间切换只需要保存任务的上下文,没有内核的开销。进程→线程→协程不断共享,...

2020-03-18 18:29:46 1124

原创 PBFT算法研究

PBFT算法研究真分布式与伪分布式目前的数据库号称分布式存储,这种分布式存储与区块链有着本质上的区别,这种分布式数据库服务器集群的分布式是为了实现服务的恢复与备份,数据的冗余,然而他们仍然属于某一个企业或机构,所以还是中心化管理的数据库集群。区块链中的各个节点相当于分布式系统中的数据库,不一样的点在于,没有一个管理员去维持各个数据库之间的数据同步,同时并没有增删改查中的删改查功能。所以是不可...

2019-08-02 09:23:08 1106

原创 系统调用学习

系统调用学习系统调用的实质就是函数调用,只是调用的函数是系统函数,处于内核态。API与系统调用的区别:每个系统调用对应一个服务例程,但一个API可对应多个系统调用。有些API直接提供用户态服务不需要用到系统调用。为什么不直接调用内核函数执行?就可以省掉系统调用这个步骤?用户空间程序不能直接执行内核代码,内核在受保护的地址空间上,不允许用户进程在内核地址空间上读写,极大地提高了系统的...

2019-03-08 13:41:46 276

原创 Linux系统编程之实现cp命令

Linux系统编程之实现cp命令cp命令是经常使用的命令,复制文件,而构思它的编写过程也非常直观。把文件中的数据读出来,创建一个新文件,再把数据写进去。这就是一个很常规的思路。而在编写程序中思考的主要问题就是要全面,各种情况的输入都要考虑完全。而打开文件,创建文件,读取文件数据,写入数据,关闭文件仍然是调用常见的内核函数open(),creat(),read(),write(),close()...

2018-11-26 12:34:59 2269 2

原创 系统编程一些提高小总结

系统编程一些提高小总结使用缓冲提高效率采用缓冲原因在编写cp命令的过程中,采用了缓冲区的机制,那么为什么要采用缓冲区呢?先从cp命令中看缓冲区的作用,首先实现cp命令是调用了read(),write()等内核函数进行实现,这里采取对缓冲区规定了大小,每次缓冲区中的数据被写入新文件后,都需要调用内核函数再往缓冲区中填充,可以想到如果缓冲区过小,需要不断地调用内核函数,cpu也要不断地切换内核...

2018-11-26 12:32:55 183

原创 Linux系统编程之实现who命令

我们需要了解到一个事实就是,在Linux练习实现系统编程的各个程序时候,我们完全可以对现有命令进行改进,也就是说可以使用自己所写的更适合自己习惯的命令(当然一般linux的命令更加全面,觉得参数麻烦也可以通过快捷命名使用),具体可以查看Linux环境变量的讨论。了解whowho命令是显示目前登录系统的用户信息。执行who命令可列出登入帐号,使用的终端机,登入时间以及从何处登入。想写任何命令的...

2018-11-11 22:56:09 1173 1

原创 头文件与函数定义分离的处理

在工程中很多时候我们需要把函数体与主函数分开处理,相信这种已经非常常见了,只需要在主函数文件中包含#include ”filename.c“即可,当然现在编译器已经足够聪明,不需要写#include ”filename.c“都可以自己找到编译,但是好习惯还是要养成的。而这次我编译Linux系统编程之实现who命令的时候采用的是将函数编译为静态库进行链接的形式。首先要把函数体拿出使用gcc -c ...

2018-11-11 22:54:34 894

原创 Linux环境变量的讨论

我们都知道Linux一些命令有使用范围,而一些任何地方都可以使用,在Linux下时不时要配环境,那么环境到底是什么?与其说我们需要配环境,不如说是在环境的帮助下我们才能执行命令。在Linux下环境变量是PATH,首先查询一下当前环境:xxx@xxx-ThinkPad-X230-Tablet:~$ echo $PATH/usr/local/sbin:/usr/local/bin:/usr/s...

2018-11-11 21:36:45 127

原创 Linux系统编程之实现more命令

Linux系统编程之实现more命令在学习内核以及内核编程的间隙,会时不时进行一些系统编程的练习,来更好的理解操作系统,边分析操作系统的职责,同时动手练习编写一些与操作系统紧密相连的程序,目的在于最终可编写实现自己意图功能的程序。系统编程与内核编程的不同?系统编程可以说是操作系统提供给用户程序的一组“特殊”接口,用户程序可以通过这组特殊的接口来获得操作系统内核提供的特殊服务。在linux...

2018-10-29 22:31:43 626

原创 main函数相关问题探讨

main函数相关问题探讨我们接触到C语言很久了,所有人的第一个C程序应该就是HelloWorld.c而main函数又是所有程序的入口,我记得我在VC下写的第一个HelloWorld是这样#include <stdio.h>void main(void){printf("Hello,world\n");}现在我们都知道这样的说法void类型不接收也不传递任何信息,mai...

2018-10-29 19:16:04 298

原创 X86架构操作系统内核实现过程

#操作系统内核实现(一)操作系统的学习还是需要落地不能停留在概念上,于是打算模仿并实现操作系统内核,前面一直在做川合秀实先生的《30天自制操作系统》,但是由于它的底层系统是windows,以及讲解较为浅显不能深入了解具体的内核运行模式状态,转到了刘欢师兄写的《X86架构操作系统内核实现》上,博客虽短只有10篇左右,但内容充实,不断的带入新的文章新的链接,在做内核的途中也游览了许多计算机各方面知识...

2018-09-24 19:05:24 2291

原创 Linux内核源码list.h解读

#list.h源码阅读此文章是我阅读list.h后的一些见解,有问题且理解不到位的地方希望大家批评指正。本次我们阅读的内核版本为4.18.7在Linux内核中,list.h是内核为了方便使用链表而自己建立的链表头文件。以__开头的是指内核函数。##链表##宏定义除了调用其它头文件外,首先看到的是两个宏定义。#define LIST_HEAD_INIT(name) { &...

2018-09-24 19:04:16 3541 3

原创 浅谈微内核

浅谈微内核微内核是什么谈到微内核,其实是与宏内核相比所称为微内核。宏内核大家应该再熟悉不过了,也称为集成式核心、单体式核心。像Linux就是典型的宏内核,它除了时钟中断、进程创建与销毁、进程调度、进程间通信外,其他的文件系统、内存管理、输入输出、设备驱动管理都需要内核完成。微内核,又称为微核心,是一种内核的设计架构,由一群数量最小化的软件程序组成,严格意义上的微内核仅仅实现操作系统最基础的机...

2018-09-23 18:32:53 10202 1

原创 编译和链接那点事感悟 -2018.9.3

在拜读了刘欢所写的编译和链接那点事后,对编译和链接有了深一步的理解,所谓编译链接即是将无法直接运行的高级语言等转化为计算机可以直接识别的机器语言必不可少的步骤,根据流程画与理解出了gcc编译器的四个过程以及所做工作: gcc分为四个步骤:预处理(cpp)、编译(cc1)、汇编(as)、链接(ld)。预处理:头文件展开,宏定义展开,注释替换等,这里的展开是将宏定义所有的展开。...

2018-09-04 15:17:34 160

空空如也

空空如也

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

TA关注的人

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