自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Manpage of TCPDUMP

   tcpdump : dump traffic on a network, 用于将网络中传送的数据包完全截获下来提供分析。1、语法tcpdump [-adeflnNOpqStvx][-c<数据包数目>] [-dd][-ddd][-F<表达文件>][-i<网络界面>] [-r<数据包文件>][-s<数据包大小>] [-...

2019-08-16 15:06:39 259

原创 cJSON源码解析

  件!   cJSON 是 C语言中的一个JSON编解码器,非常轻量级,C开源代码汇总,代码量少,不到一千行,代码的可读性高,很适合作为 C 语言项目进行学习。   对于 json 格式编码与解码,其实就是类似于一个解释器,主要的原理是运用递归。  首先看下 cJSON.h 中定义的 cJSON数据结构,typedef struct cJSON { struct cJSON *ne...

2019-08-04 15:54:43 503

原创 C++开源项目

值得学习的C开源项目1、Webbench  Webbench 是一个在Linux 下使用的非常简单的网站测压工具。它使用fork() 模拟出多个客户端同时访问服务器,测试网站在压力下的工作性能,最多可以模拟3万个并发连接欸去测试网站的负载能力。Webbench 使用C 语言编写,代码简单,源码加起来不到600 行。Webbench 下载地址 http://home.tiscali.cz/...

2019-08-02 18:27:42 594

原创 C++ 11右值引用与移动语义 -----下

分类   1、完美转发(存在的问题)   右值引用还可以被用来解决完美转发的问题,考虑下面的代码,很明显代码的意图是将Arg 参数通过 factory 函数转发到 T 的构造函数中。但是代码在这种状况template<typename T, typename Arg> shared_ptr<T> factory(Arg arg){ return shar...

2019-07-30 15:33:50 262

原创 C++ 11右值引用与移动语义 -----上

分类 Django搭建Web学习笔记项目  1、介绍  右值引用是C++11的新特性,初次接触觉得很难理解。因此我们将不直接给出右值引用的定义,而是从没有引入右值引用之前存在的问题,引入右值引用之后问题是如何解决的。  在 C语言 最原始的定义中,左值可以位于赋值运算符左边或者右边;右值只能位于赋值运算符右边。int a = 42;int b = 43;// a, b 都是左值...

2019-07-30 14:39:47 361

原创 虚拟机与主机windows共享文件--SAMBA服务

1、两台Windows 之间 share 目录的方法利用网上邻居可以实现,\\IP -- share file,利用的是SMB:Server Message Block。2、安装sambaLinux 下的samab 服务,相当于Windows 下的SMB 服务。运行了samab 服务的Linux 可以与Windows 实现类似网上邻居形式的文件共享。 安装samabyum inst...

2019-07-28 10:49:20 916

原创 Windows下搭建Django 环境

1、安装virtualenv进入cmd 界面,输入命令pip install virtualenv如果提示版本不够,按照提示的更新版本即可。2、建立虚拟环境要使用Django,首先需要建立一个虚拟工作环境。虚拟环境是系统的一个位置,使得你可以在其中安装包,并将其与其他的Python 包隔离。在想要创建虚拟工作环境的地方创建目录"D:\python\Python_Virtual...

2019-07-27 11:40:07 354

翻译 史上最全Epoll 源码解析

仔细看会有收获!//sys/epoll.h#ifndef __sigset_t_defined#define __sigset_t_definedtypedef __sigset_t sigset_t;#endif /*错误标志EINVAL : 无效的标志EMFILE : 用户打开的文件超过了限制ENFILE : 系统打开的文件超过了限制ENOMEM : 没有足够的内存完成...

2019-07-26 12:20:11 600 1

原创 Muduo网络库的实现多线程(十)

1、EventLoopThreadPool用 one loop per thread 的思想实现多线程TcpServer 的关键步骤是在新建TcpConnection 的时候从 event loop pool (事件循环池)中挑选一个 loop 给 TcpConnection 用。也就是说多线程 TcpServer 自己的EventLoop 只用来接收新连接,而新连接会用其他的 EventLoo...

2019-07-23 13:54:24 545

原创 MIT6.828 32位操作系统笔记(15)----系统调度、IPC和页面失效控制 LAB4下

MIT EDU 6.828 实验源代码 分类 MIT6.828 32位操作系统实验笔记    1、Part C : 抢先多任务和进程间通信  LAB 4 的最后一部分将修改代码以实现抢先多任务,并实现进程间的通信。(1) 时钟中断和抢占  运行程序 user/spin,这个程序中,父进程fork() 子进程,然后子进程一旦得到CPU 的使用权,将永远自旋,内核和父进程将永远不会再得...

2019-07-23 09:41:27 487

原创 MIT6.828 32位操作系统笔记(14)----系统调度、IPC和页面失效控制 LAB4中

MIT EDU 6.828 实验源代码 分类 MIT6.828 32位操作系统实验笔记   分类 MIT6.828 32位操作系统实验笔记   本文参考文章 http://grid.hust.edu.cn/zyshao/OSEngineering.htm...

2019-07-16 18:43:20 668

转载 c++编译链接模型精要

分类 c++ 语言的三大约束是:与 c 兼容、零开销原则、值语义。与 C 兼容除了语法兼容,更重要的是兼容 C 语言的编译模型与运行模型,现代操作系统暴露出的原生接口往往是 C 语言描述的。从.c 文件到.o 文件需要经过 预处理、编译(代码转换)、汇编、链接.i 表示经过预处理的文件.s 表示汇编语言源代码文件.S 表示经过预编译的汇编语言源代码文件.o 表示编译后的目标文件C...

2019-07-15 18:11:56 471

原创 MIT6.828 32位操作系统笔记(13)----系统调度、IPC和页面失效控制 LAB4上

MIT EDU 6.828 实验源代码 分类 MIT6.828 32位操作系统实验笔记  0、下载lab4 的源代码[root@xxx lab]# git add .[root@xxx lab]# git commit -am 'changes to lab3 after handin'[lab3 76d9a7d] changes to lab3 after handin 12...

2019-07-15 15:19:31 1113

原创 MIT6.828 32位操作系统笔记(12)----进程管理与中断 LAB3下

MIT EDU 6.828 实验源代码 分类 MIT6.828 32位操作系统实验笔记1、缺页中断缺页中断是一个非常重要的中断,因为我们在后续的实验中,非常依赖于能够处理缺页中断的能力。当缺页中断发生时,系统会把引起中断的线性地址放到控制寄存器CR2 中。 在trap.c 文件中,已经提供了一个能够处理这种缺页异常的函数page_fault_handler()。 Exercise 5...

2019-07-12 15:18:58 580

原创 MIT6.828 32位操作系统笔记(11)----进程管理与中断 LAB3中

MIT EDU 6.828 实验源代码 分类 MIT6.828 32位操作系统实验笔记0、下载lab3 的源代码 分类 MIT6.828 32位操作系统实验笔记 本文参考文章 http://grid.hust.edu.cn/zyshao/OSEngineering.htm推荐这位博主系列的文章 ...

2019-07-10 13:46:44 649

原创 MIT6.828 32位操作系统笔记(10)----进程管理与中断 LAB3上

MIT EDU 6.828 实验源代码 分类 MIT6.828 32位操作系统实验笔记0、下载lab3 的源代码[root@xxx lab]# git add .[root@xxx lab]# git commit -am 'changes to lab2 after handin' 2 files changed, 139 insertions(+), 24 deletions...

2019-07-08 10:27:29 711

原创 Muduo网络库的实现单线程网络服务器完善(九)

源码下载以及安装点击链接https://blog.csdn.net/YoungSusie/article/details/90021742

2019-07-07 15:32:49 368

原创 TCP网络编程需要考虑的问题

基于事件的非阻塞网络编程是编写高性能并发网络服务程序的主流模式,这种模式下,注册一个收数据的回调,收到数据会回调;注册一个接受连接的回调,接受到新连接之后会回调。TCP网络编程最本质的是处理三个半事件: 连接的建立 连接的断开 消息到达 消息发送完毕 其中存在不少难点:如果要主动关闭连接,如何保证对方已经收到了全部数据?解答: 使用shutdown???在非阻塞网络编...

2019-07-07 08:45:17 755

原创 MIT6.828 32位操作系统笔记(9)----内存管理 LAB2下

1、内核地址空间JOS 将32位线性地址虚拟空间分为两部分,其中用户环境(用户进程)通常占据低地址部分,叫做用户地址空间;操作系统内核总是占据高位,叫做内核地址空间。这两部分的分界线是定义在memlayout.c 中的一个宏ULIM。JOS 为内核保留了256MB 的虚拟地址空间[0xF0000000,0xFFFFFFFF],这也解释了为什么在LAB1 我们设置的KERNBASE 是0xF000...

2019-07-06 10:07:44 479

原创 MIT6.828 32位操作系统笔记(8)----内存管理 LAB2中

1、页表管理Exercise 1 中,我们分配了一个页表使得内核代码可以在其链接地址(0xf0100000)运行,代码被加载在物理地址(0x00100000)。一旦进入保护模式,不能直接用线性地址,所有的指针所指的地址都是虚拟地址。代码中的 uintptr_t 表示的是虚拟地址;physaddr_t 表示的是物理地址。T* Virtual addressuintptr_t ...

2019-07-06 08:10:27 486

原创 MIT6.828 32位操作系统笔记(7)----内存管理 LAB2上

区别主要在于两点1、背景知识通过实验1,我们知道,JOS 的启动过程实际上是BIOS先把bootsector(boot loader,位于可引导磁盘的第一扇区) 的内容读取到0x7c00处,并将控制权交给boot loader,boot loader 的任务有两个:(1) 将模式从实模式转换为保护模式;(2)将内核可执行文件(ELF,位于第二个扇区开始的8个扇区)加载到内存,内核可执行程序被加...

2019-07-05 18:54:56 679

原创 Muduo网络库的实现TcpConnction改进(八)

源码下载以及安装点击链接https://blog.csdn.net/YoungSusie/article/details/90021742本服务器只有一种方法可以断开连接:被动关闭,即对方先关闭连接,本地read返回 0 ,触发关闭逻辑。1、Channel class 的改动Channel class 新增了closecallback 事件回调,并且断言(assert ) 在事件处理期间本c...

2019-07-05 14:01:49 455

原创 Muduo网络库的实现TCP网络库(七)

Reactor 事件处理框架如图不同于传统的Reactor,将timers 做成循环中单独的一步,muduo将 timers 和IO handlers 视为等同的。1、Acceptor classAcceptor class 用于 accept 新的TCP 连接, 并通过回调通知使用者,这是一个内部class , 供 Tcpserver 使用,Acceptor class 的生命期 由 T...

2019-07-04 18:48:58 483

原创 MIT6.828 32位操作系统笔记(6)----LAB1下

1、系统的启动过程

2019-07-04 10:06:16 391

原创 Muduo网络库的实现runInLoop(六)

1、runInLoopEvent Loop 有一个非常有用的功能:在它的IO线程内执行某个用户任务的回调, 即EventLoop::runInLoop(const Functor & cb), 其中 functor是 boost::function<void()>。如果用户在当前IO线程调用这个函数,回调会同步进行;如果用户在其他线程调用runInLoop(),cb会被加入队...

2019-07-02 11:03:07 461

原创 MIT6.828 32位操作系统笔记(5)----GDB调试与qemu monitor

利用qemu 和 gdb 探索PC机 的启动过程。1、GDBDebug With GDBctrl + C,终止运行c , 继续运行si (or stepi), 执行一条机器指令b function or b file:line or b *addr 设置断点info break 查看断点的信息delete 断点号 ,删除第n 个断点n 单步执行,不进入函数step ...

2019-06-30 10:17:07 1257

原创 MIT6.828 32位操作系统笔记(4)----LAB1上

1、安装qemu 下载qemugit clone https://github.com/mit-pdos/6.828-qemu.git /usr/local (后面的表示将文件保存到这个文件夹下) 切换到文件目录,并运行命令./configure --disable-kvm --target-list="i386-softmmu x86_64-softmmu" 运行命令make...

2019-06-29 08:51:43 657

原创 MIT6.828 32位操作系统笔记(3)----系统的启动和初始化

分段机制 1、系统的启动过程物理内存的分布首先分析PC 开机以后的默认物理内存的分配。PC 的物理内存空间会由硬件规定产生如下所示 的布局。...

2019-06-28 11:29:22 708

原创 Muduo网络库的实现TimerQueue定时器(五)

考虑为什么是 -1?给前面的EventLoop 加上定时的功能,传统的Reactor 通过控制select 和 poll 的等待时间来实现定时,现在Linux 系统中有了timefd ,可以用和处理IO事件相同的方式来处理定时。timerfd_create() 函数把时间变为一个文件描述符,该“文件” 在定时器超时的那一刻变得可读,可以融入Reactor 模型中,用同一的方式处理IO ...

2019-06-27 15:47:26 458

原创 MIT6.828 32位操作系统笔记(2)----AT&T汇编语言与GCC内嵌汇编

分段机制 1、AT&T 汇编语言的相关知识在Linux源代码中,以.S(或.s)为扩展名的文件是包含汇编语言代码的文件。GNU汇编程序GAS(GNU Assembly)和连接程序一个编辑好的程序需要对其进行汇编和连接。在Linux下有两种方式,一种是使用汇编程序GAS 和连接程序LD;另一种是使用GCC。(1)使用汇编程序GAS 和连接程序LD//将汇编语言源文件转换为目...

2019-06-27 09:11:47 397

原创 Muduo网络库的实现EventLoop class 的改动(四)

考虑为什么是 -1?EventLoop class 新增了quit() 成员函数,可以终止事件循环,令标志变量quit_ 的值为 true 即可,但是调用quit() 并不是立马起作用,而是在下一次检查 loop() 的while(!quit_) 的时候起效。 如果EventLoop::loop 正阻塞在某个调用中,quit() 不会立刻生效。1、学习笔记EventLoop 通过...

2019-06-26 15:46:34 359

原创 MIT6.828 32位操作系统笔记(1)----基本概念

1、80386保护模式和实模式8086处理器是一款16位的处理器,这种处理器的数据总线是16位,而地址总线是20位,最大寻址范围位1MB的地址空间。数据总线是用来传送数据信息,数据总线的位数决定了CPU单词通信能交换的数据量。地址总线 是用于传送CPO发出的地址信息,地址总线的位数决定了CPU 的寻址范围。控制总线 用来传送控制信号、时序信号和状态信息等。80386 处理器是一款32...

2019-06-26 15:25:35 558

原创 Muduo网络库的实现Poller class(三)

其次还需要注意:Poller class是IO multiplexing 的封装。Poller 是Event Loop的间接成员,直供其所属Event Loop 在IO线程 调用,因此无需加锁,其生命期与Event Loop 一样,Poller 不拥有Channel ,Channel 在析构的时候需要自己注销,避免空悬指针。...

2019-06-25 08:34:34 521

原创 Muduo网络库的实现Channel class(二)

其次还需要注意:Reactor 最核心的 事件分发机制,即将IO复用拿到的IO事件分发给各个对应的文件描述符的事件处理函数。每个Channel对象自始自终只属于一个Event Loop,因此每个Channel 对象只属于一个IO线程。 每个Channel 对象自始自终只负责一个文件描述符的IO事件分发, 但是Channel 对象并不拥有这个文件描述符,不会在析构的时候关闭这个文件描述符。 ...

2019-06-24 10:10:34 536

原创 Muduo网络库的实现EventLoop class (一)

muduo网络库采取的模式为: one loop per thread + thread pool0、什么都不用做的EventLoop classone loop per thread 每个线程只能由一个EventLoop对象,其构造函数会用__thread 类型的变量记住本对象所属的线程ID。创建了EventLoop 对象的线程是IO线程,其主要功能是运行事件循环loop(),事件循环 必...

2019-06-23 12:52:06 361

原创 TCP网络编程之服务器程序设计范例

1、accept + fork, TCP并发服务器程序每个客户一个子进程存在的问题是每个客户现场fork 一个子进程比较悍匪CPU时间。此类型并发服务器的主体循环伪代码如下for(;;){ clilen = addrlen; if((confd = accept(listenfd,cliaddr,&clilem)) < 0) { if(errno == EIN...

2019-06-21 08:37:46 518

转载 线程和信号

转自 http://blog.chinaunix.net/uid-10231348-id-3036633.html部分参考 https://blog.csdn.net/intrepyd/article/details/4473533 类UNIX信号以前是专门未进程设计的,比线程早出现很多年。如果要在线程模型中保持原来在进程中信号语义不变,困难。因此应该 避免信号和线程一起使用 。但是...

2019-06-19 20:32:03 913

原创 C++多线程系统编程精要(二)

本文摘自陈硕老师的linux多线程服务端编程1. 多线程与IOList item

2019-06-19 19:44:55 370

原创 C++多线程系统编程精要(一)

本文摘自陈硕老师的linux多线程服务端编程学习多线程最大的思想转变有两点:(1)当前线程可能随时被切换出去,或者被抢占了。(2)多线程程序中事件的发生顺序不再有全局统一的先后关系。线程被切换回来的时候,全局变量可能已经变化。多线程程序运行的正确性不能依赖于任何一个线程的执行速度,不能通过原地等待来假定其他线程的事件已经发生,必须 通过适当的同步 来让当前线程能看到其他线程事件的结果。...

2019-06-17 14:05:45 468

原创 多线程服务器的适用场合与常用编程模型

本文摘自陈硕老师的linux多线程服务端编程1. 单线程服务器的常用编程模型non-blocking + IO multiplexing 模型,即Reactor 模型。Reactor模型是事件驱动模型,有一个或者多个并发输入源,类似于生产者与消费者模式,有一个或者多个生产者将事件放入一个Queue中,而一个或者多个消费者主动从队列中Poll事件来处理。Reactor基于事件回调函数必须是...

2019-06-14 14:42:13 518

空空如也

空空如也

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

TA关注的人

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