自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(93)
  • 资源 (1)
  • 收藏
  • 关注

原创 什么是maven

maven是一种项目管理工具,maven项目与普通项目的不同是,项目中多了一个pom.xml的文件,用于告诉当前项目所需要的jar的位置,从而无须手动将需要用到的jar包引入...

2018-06-16 23:25:49 342

原创 今天安装spring的时候遇到一些缺少repository的问题

在安装spring的时候会对其依赖的一些库的进行一些链接检查,导致会报一些缺少repository的问题No repository found containing: osgi.bundle,oracle.eclipse.tools.rest.lib,16.4.0.201705251324No repository found containing: osgi.bundle,org.eclips...

2018-06-02 18:40:51 1281

原创 进程是如何结束与回收的

大致描述进程创建的过程,系统中有一个叫做init的初始进程,由它调用fork产生子进程(完全拷贝父进程的一切堆栈,代码,数据,文件资源等),子进程使用exec装载磁盘中的elf文件,更换自己的程序(包括代码段和数据段)。进程的退出必须要使用exit(),exit()不是一个语言上的返回,它是一个系统调用,会释放当前的内存,文件资源等,但是此时pcb还未回收,只是一个僵尸进程,父进程使用wait()得

2018-04-02 20:14:27 1847

原创 于渊<orange's 一个操作系统的实现>中文件系统的bug

其实这不属于文件系统的bug,这应该属于进程的bu,不知道有没有跑过第九章文件系统的最后代码的,是一个和linux下文件系统调用一样的范例。一开始感觉TestB()和TestC()这两个进程没用,这两个实际进程没做什么,就是Print一下,然后就死循环了,然后就删掉了,只留下了个进程TestA(),然后问题就出现了总是报异常,但是另外两个进程加上去之后就没事了,很不解。后来发现,文件系统也是由一个系

2018-04-01 21:38:51 906 8

原创 于渊《orange's 一个操作系统实现》的字符串输出函数disp_str有bug会导致异常

于渊先生的《orange’s 一个操作系统实现》的字符串输出函数disp_str有bug会导致异常发现在同一个函数中两次使用disp_str就会导致异常,这个问题困扰了我很久,一般来说都是堆栈的没有恢复好的问题,在反复的检查后发现堆栈并没有什么问题,disp_str是一个汇编程序,莫名觉得是符号问题,鬼使神差的使用c程序对其包装发现没有这样的问题,一直往堆栈方向想,但后来想到自己大一写汇编函数...

2018-03-26 17:12:51 1562 9

原创 马斯克的第一性原理是什么?

spacex跨时代的此次发射回收推进节成功之后,mask又火了一把,铺天盖地的关于mask的报道,其中犹甚提到了mask非常尊崇的“第一性原理”,从知乎了解之后大概如下:比如预测某种大自然的力学活动时,需要通过建立理论模型去求解问题,但很多时候模型的细节太多太过于复杂没有办法完全表示的时候可以使用一些先验的假设去完善这种模型,然后在这种假设下计算的得出结论,也被称之为预测而相对于另一种,不

2018-02-11 12:44:07 4558

原创 汇编中标量和变量的区别

今天看汇编的时候遇到的一个说法 对于一个变量来说num dw 2mov bx num ;mov cx [num]; bx == cx ==2上面两种写法居然是一样的,这有点让我讶异,我一直以为汇编中无论是变量还是标号,应该是一个地址才对,不加中括号的时候是地址,加了中括号之后就是地址对应的值,但是实际上这个想法居然是错的?! 就看过网上的一个版本是这么陈述的:1,对于mov指令来说:有没

2018-02-08 16:51:48 585

原创 intel汇编学习笔记 loop和test

loopxor eax, eaxmov ecx, 1024 .begin:add eax, 1loop .begin ; if( --ecx > 0 ) goto .begin:如c版本注释所示,当–ecx > 0时会跳转到.begintesttest eax,eax ;if(( eax & eax ) == 0 )jz label

2018-01-29 22:54:40 987

转载 一致代码段和非一致代码段和CPL,RPL,DPL

之所以出现这个定义是因为系统要安全:内核要和用户程序分开..内核一定要安全.不能被用户程序干涉.但是有时候用户程序也需要读取内核的某些数据,怎么办呢?操作系统就引入了访问特权等级(0-3)的机制.这些特权等级,通过三个符号来体现CPL/DPL/RPL.其中CPL是存寄存器如CS中,RPL是代码中根据不同段跳转而确定,以动态刷新CS里的CPL.DPL是

2018-01-29 16:37:18 288

原创 于渊<orange's一个操作系统的实现>保护模式部分详解

进入保护模式内容详解实模式和保护模式的区别实模式和保护模式是cpu的两种不同的工作模式,这两种工作模式主要的区别在于寻址方式的不同,寻址方式的意思是寻找地址的方式,这里稍微啰嗦一下,其实对于寻址更方便的理解方式应该是“寻值”,其实在汇编中无论是值还是地址或者变量本质上都是一个数值而已,所谓的“寻值”就是要确定这个东西在指令中究竟对应的数值是什么。 在介绍阆中不同工作模式下的不同寻址方

2018-01-28 22:15:38 1834

原创 ubuntu下包装drcom拨号

学校使用drcom拨号上网的,但有时候下载的版本很奇怪会占用终端,于是写个程序重新包装一下#include#include#includeconst char app[]="/home/woder/download/DrClient/DrClientLinux";//应用名const char dir[]="/home/woder/download/DrClient";//应用目录

2018-01-24 18:24:32 241

原创 c语言源文件为什么要引入同名头文件

在编译器眼中其实.c文件和.h文件并没有什么本事的区别,都是同样的文件,并不是说编译头文件的时候就会去找同名头文件,.h文件的内容会被完全替换源文件中的include "xxx.h",然后编译成.s 汇编文件,最后在链接的时候才和外部的符号进行链接。为什么多了一个.h的文件大概是为了方便区分。那为什么常见自己写的源文件中会看到所写的include "xx.h",引入同名头文件呢,这句话并不

2018-01-22 18:12:39 5437 1

转载 模拟信号和数字信号的区别

作者:杨眀链接:https://www.zhihu.com/question/38377832/answer/118464689来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。题主说的模拟信号是相对数字信号而言的吧?  如果是的话,那它就是指连续的意思。举个例子帮助你理解模拟和数字的区别:常见的仪表显示有指针式和数字式,指针式仪表,可以

2018-01-22 17:30:48 26160

原创 头文件只能放变量的声明但是不能放定义

一般的做法都是在头文件(.h)中声明变量,然后在源文件(.c)中定义变量如果在头文件中定义变量,这个变量就有了实体,如果a.c和b.c一起引用了头文件head.h,就等于同时创建了两个同样名字的变量实体,在一个工程下,链接的时候就会导致重定义的问题如何在头文件中声明变量而不是定义呢 ?使用extern关键字,extern关键字表示当前变量在别处定义,需要链接到外面的文件才能找到具体的变量,

2018-01-22 17:24:14 2811 1

原创 gcc中的内联asm笔记(1)

uint16_t port;uint8_t value;...asm volatile ("outb %1, %0" : : "dN" (port), "a" (value) );写玩具内核的时候看到要读写端口,接触到了gcc的内联汇编,如上,解释一下outb %1, %0 表示把%1的内

2018-01-22 16:28:45 1491 1

转载 sed -i命令详解

sed -i命令详解[root@www ~]# sed [-nefr] [动作]选项与参数:-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。-e :直接在命令列模式上进行 sed 的动作编辑;-f :直接将

2018-01-19 21:18:37 37891

原创 如何安装windows和linux双系统

最近装了两天系统积攒了一下经验。原本一直使用win7,现需要使用linux操作系统作为开发环境,虚拟机的能力总是有限,所以打算装双系统,装系统以前一直对我来说一直很神秘,为什么系统需要各种启动引导什么的,装双系统和单系统的区别又是什么,按照网上教程走的时候有时后会经常遇到一些问题导致失败又不知道该如何解决,归根到底是不知道计算机如何启动的,看完下面的博客就不会不知道自己机械的装系统的时候到底在

2018-01-19 21:11:48 23249 2

原创 管道的创建与读写

//创建自己的管道 int pid = getpid(); char pipe_name[20]="/tmp/mypipe"; int client_pipe = mkfifo(pipe_name, 0777); //创建管道文件 if( client_pipe < 0 ){ //也可使用access(pipename,F_OK)测试文件是否存在,ret 0

2018-01-05 11:31:35 716

原创 线程的创建,取消,同步与回收

#include <pthread.h>pthread_mutex_t codvoid* fn(void *arg){ pthread_mutex_lock(&cond);//上锁 ... pthread_mutex_unlock(&cond);//解锁}void main(){ pthread_t pid; pthread_create(&pid, NULL,f

2018-01-05 11:26:11 279

原创 c++ 使用boost去读写json

这两天刚好写一个小玩具需要用到读写配置文件,趁机学习了c++的boost 读写库{"SERVER_REG":"/tmp/wangyishen_register","SERVER_LOG":"/tmp/wangyishen_login","SERVER_CHAT":"/tmp/wangyishen_sendmsg","MAX_CONNECT_NUM":"2"}对于上面一个位于/etc/erv

2018-01-05 11:20:06 4029

原创 管道读写的阻塞与非阻塞

在管道文件为阻塞读和阻塞写的时候,无论是先读还是先写都要等到另一个操作才能离开阻塞,也就是:如果先读,陷入阻塞,等待写操作;如果先写,陷入阻塞,等待读操作。而非阻塞读和非阻塞写,是无须等待另一个操作的,直接执行read()或者write()能读就读,能写就写,不能就返回-1,非阻塞读写主要是用于自己循环读取,去判断读写的长度在使用非阻塞的时候,有一个很需要注意的地方,在fifo的man

2018-01-04 15:59:05 9331

原创 printf函数使用注意

一定要注意printf中的前面参数和后面类型是否对应,特别在输出字符串的时候,比如下面printf("%s",1);--------------------------------------core dumped直接就发生core dumped了,是因为把1当成地址去寻址想要访问对应存储的内容,但是发现没有访问权限越界了这个g++只是warning ,并不error的,有时候是会想尝试着写写,

2018-01-03 22:53:20 901

原创 无符号与有符号比较的时候会发生隐转

以前看过无符号和有符号比较的时候,有符号会转成无符号,今晚没注意sizeof的返回类型是size_t 是unsigned int,结果调了很久才发现这里long len =-1;char taq[248]; if(len > sizeof(taq)){ printf("aaaa\n"); }-------------------------------------

2018-01-03 22:27:38 308

原创 java代码构造块

java 中存在着代码构造块,在创建对象的时候会被调用,如下class test { int num; //代码构造块 { num = 2; }}除了在类定义中加入构造块,在创建类的时候也可以加上新的构造块,如下class test { int num; //代码构造块 { num = 2; }}public class hello{ pu

2017-12-30 17:10:27 205

原创 java中的一切是值传递

值传递: 传输的是变量中存储的东西对于基本数据类型来说,存储的是数据本身,而对于对象变量来说,存储的是对象于内存中的引用java中的一切传递都是值传。

2017-12-27 22:27:45 228

转载 String、StringBuffer与StringBuilder之间区别

最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下。关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺点,到底什么时候该用谁呢?下面我们从以下几点说明一下  1.三者在执行速度方面的比较:StringBuilder >  StringBuffer  >  String

2017-12-26 22:06:08 158

原创 vim的c++运行环境的搭建

vim的配置基本学习资料不是非常了解vim的配置的可以参考下面资料: https://github.com/int32bit/use_vim_as_ide vim的安装vim的安装最好是上github或者官网下载安装, 直接使用apt-get等方式安装的有可能是阉割版导致不支持python等,会使得部分插件无法使用. 最新版vim 8.0的安装:从github获取vim git clone

2017-12-07 17:09:31 4147

转载 vim编辑器的配置

准备工作由于大多数vim插件都可以在github上找到,而且通过git安装、删除、升级插件都异常简单,因此我们需要首先安装git工具,如果不知道git和github,可以先自行GoogleCentOS安装sudo yum install gitUbuntu安装sudo apt-get install gitMac安装由于Mac没有像yum和apt-g

2017-11-28 10:31:49 292

原创 一个简单的socket监听的服务器实例

#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<signal.h>#include<unistd.h>#include<stdlib.h>#include<assert.h>#include<stdio.h>#include<string.h>#include<stdbool.h>

2017-09-26 16:29:46 3961

原创 有了进程还引入线程的本质原因

linux中,线程是以轻量级进程实现的,在内核看来,线程就是进程没有区别,为什么还引入线程呢? 1.节省空间,对于进程a正在执行的任务1阻塞了,这个想要使用另一个进程b去完成进程a的任务2的效果(如果需要的话并将结果传回给进程a),那么进程b就要对进程a的很大一部分资源(代码,数据)都要进行一部分拷贝,这就造成了在这些数据在内存中的重复,浪费了空间。而线程的引入解决了空间上的开销,linux中

2017-09-24 16:41:28 3230 2

原创 tcp三次握手,四次挥手的原因

根本原因网络传输会丢包,需要ack包去保证传到了,而ack包依靠tcp重传机制的附带特性不需要第二个ack包去确认ack到达。三次握手正常的tcp连接如上图所示(1)客户端希望与服务端建立连接请求 (2)服务端告诉客户端同意建立连接请求 (3)客户端告诉服务端,收到了服务端的同意的信息 三个步骤存在的原因步骤(1)缺失了,客户端连申请都不发送,服务端怎么知道你要连接 步骤(2)缺失了,

2017-09-24 16:02:02 727

原创 MIPS64寄存器与指令集

MIPS64指令集 需要注意的与32位的区别(32为的w:word  ----- 64为的d: double):运算类:add变成dadd,同理sub/mul/div变成dsub/dmul/ddiv访存: lw变成ld, sw变成sd寄存器名: S0/S1…   全部变为r0/r1/… / r31 I/O映射表  在符号区域定义的符号的值是当前符号所

2017-09-20 20:31:38 13539

原创 linux系统编程手册阅读笔记-c20:信号的基本概念

chapeter 20 :信号的基本概念内核信号机制实现http://www.spongeliu.com/165.html 当进程P2向p1发送信号后,内核接受到信号,并将其放在p1的信号队列中,当p1再次陷入内核态时,会检查信号队列,并根据相应的信号调取相应的信号处理函数。 - p1什么时候会陷入内核态?当前进程由于系统调用、中断或异常而进入系统空间,到返回用户空间的前夕。 当前进程在内核中

2017-09-20 17:03:27 416

原创 实际用户id(real user id)、有效用户id(effective user id)和保存的设置用户id(saved set-user-id)

进程的三种用户id1.实际用户id(real user id):当前进程的实际调用用户的id 2.有效用户id(effective user id):文件的set_user_id位被关闭,和实际用户id一样;set_uesr_id开启,为文件拥有者的id 3.保存的设置用户id(saved set-user-id):程序运行时有效用户id的副本.引入有效用户id的原因可执行文件A的拥有者是roo

2017-09-18 21:34:42 1806

原创 void ( *p ) (void) 和 void ( *p () ) (void)的区别

今天看信号的时候遇到一个很奇怪的函数原型 void ( signal(int sig, void ( handler)(int))) (int); 这是一个函数,其中参数为int sig,void(*handler)(int) 返回类型为一个指向 void (int)类型函数的指针对于void ( *p ) (void) 和 void ( *p () ) (void) void ( *p

2017-09-18 12:01:20 2518

原创 c++primer plus阅读笔记(十)

自增的先后operator ++ (int) ;a++operator ++ (); ++ac++左值与右值右值是一般都是临时对象,可能存在寄存器或可能被编码到机器指令的【立即数】中,所以右值无法使用【’&’】取地址。 int a;a=++a; //a是左值,而++a是operator++()返回的左值引用和右值引用int &;//为左值引用int &&;//为右值引用非const右

2017-09-15 11:19:55 254

原创 c++primer plus阅读笔记(九)

权限与构造函数构造函数与析构函数与成员中的方法一样是具有权限的,而且调用者就是使用者的那段代码域如果把构造函数设置成私有的话,那只有友元或友类才能创建。同理,析构函数不一定要求是public的,如果析构函数是private,那除了友元和友元类之外,只能使用堆的方式建立对象class a{private: ~a(){ ... }};main{ a Tem

2017-09-15 11:19:12 183

原创 c++primer plus阅读笔记(八)

友元类1.友元类的声明class Tv{ friend class Remote;//友元类就代表这肯定是一个类,无须前向声明Remote。};class Remote{ ...};2.友元成员函数不想使用友类所有函数都变成友元,可以使用友元成员函数。!!编译器本身的符号解析和编译时按顺序来的,导致友元成员写起来要注意顺序。class a ; //a要前向声明

2017-09-15 11:18:28 259

原创 c++primer plus阅读笔记(七)

继承权限继承后,基类的私有,保护,公开成员的属性是对派生类的,继承之后的属性在派生类与原有的属性一样,但是超过继承方式的会被统一压在继承方式下。class time{private: .. protected: ..public: ..};class time2:protected time{};Time2以保护的方式继承之后,time的public成员统一变成了

2017-09-15 11:17:22 70

原创 c++primer plus阅读笔记(六)

c++自动提供的成员函数默认构造函数,如果没有定义构造函数默认析构函数,如果没有定义拷贝构造函数。如果没有定义赋值运算符,如果没有定义地址运算符,如果没有定义。什么时候调用拷贝构造函数Time time_ob_2(time_ob_1);Time time_ob_2 = time_ob_1;Time time_ob_2 = Time(time_ob_1);Time *time_ob_2

2017-09-15 11:16:15 212

orange's一个操作系统的所有章节代码

资源看起来不大是因为是.rar,有相应的光盘源码,放在这里只是方便大家也方便自己,2积分是最低没办法调成0了,如有侵犯,请通知,马上处理

2018-01-27

空空如也

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

TA关注的人

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