Linux系统编程
文章平均质量分 79
Waorange
这个作者很懒,什么都没留下…
展开
-
Linux进程控制--进程创建
Linux进程创建‘linux下创建进程的方式有三种,通过fork vfork clone系统调用实现进程的创建1. fork()原创 2018-11-03 17:37:16 · 879 阅读 · 0 评论 -
从零开始的HTTP项目
这个项目是基于HTTP1.0版本的一个简单web服务器,主要用于练习网络编程和系统编程。使用技术:项目使用c++编写、cgi技术、多线程、 多进程(处理cgi)、socket网络编程版本1采用线程池加任务队列的方式处理请求版本2采用Reactor的设计模式,通过epoll + 线程池 + 就绪队列 + 事件池的方式编写,解决了版本1中处理cgi时工作线程阻塞等待问题。注:该项目参考Tin...原创 2019-01-24 16:25:23 · 1427 阅读 · 0 评论 -
Linux线程(3)--线程池
线程池线程池是一种对线程进行管理的一种机制,其线程创建释放和获取任务均由线程池来完成,如果一个应用需要频繁的创建线程处理任务,如果不对线程加以现存限制,当任务爆发时可能会因为内存不足造成瘫痪,另外线程的创建和释放需要成本,线程数量增多后线程的调度也会变慢。因此当每个线程处理时间特别段或者需要对线程的数量加以限制时可以使用线程池。在这实现一个简单的固定数量的线程加任务队列的一个线程池...原创 2018-12-24 19:33:05 · 616 阅读 · 0 评论 -
Linux线程(2)--线程同步与互斥
同步与互斥同步:同步是不同任务之间的直接制约关系,是具有顺序性的执行,比如两个进程B依赖A执行完的数据, 因此只有执行了A才能执行B,其规定的是执行次序。互斥:互斥是访问临界区的唯一性,是一种间接制约关系,同一时间只能有一个任务执行。比如在某一时刻只能有一个进程或者线程对一个文件进行写入。临界区是访问临界资源的代码,临界资源是同一时间只能有一个任务访问的资源。这个任务可以是进程也可以是线程。...原创 2018-12-22 19:22:29 · 719 阅读 · 0 评论 -
Linux线程(1)--线程概念
线程在这先解释下进程,进程是一个执行的实体,包括其需要执行的程序,以及其活动过程是一个动态的过程,可以讲进程是一个“执行中的程序”,从操作系统角度进程是资源分配和一个独立单位,操作系统在分配CPU、内存、时间片等资源时是以进程为基本单位的。在Linux下没有真正的用户线程,真正的用户线程是建立在用户空间,其对内核是透明的,因此其所属进程单独参与处理器的竞争,而进程的所有线程参与竞争该进程的资源...原创 2018-12-22 11:10:51 · 340 阅读 · 0 评论 -
进程间通信--共享内存
共享内存当一个程序想和另外一个程序通信的时候,那内存将会为这两个程序生成一块公共的内存区域。这块被两个进程分享的内存区域叫做共享内存共享内存是进程间通信最简单的一种,共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针。当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更改。通信的进程间共享同一块内存,进行操作时和访...原创 2018-11-17 20:23:17 · 770 阅读 · 0 评论 -
进程间通信--消息队列
消息队列消息队列提供了向另一个进程发送一个数据块的方法,每个数据块均具有类型消息队列是消息的链表,存放在内存中,由内核维护,其维护空消息队列,当进程需要传递消息时其申请空消息缓冲块填入数据,之后将消息块挂在另一个进程的消息队列上,当对方接收后会将此消息块从对方消息队列删除重新添加到空消息链表中。消息队列也有管道一样的不足,就是每个消息的最大长度是有上限的(MSGMAX),每个消息队列的总的...原创 2018-11-14 20:44:54 · 229 阅读 · 0 评论 -
进程间通信--命名管道
命名管道命名管道是一个存在于文件系统的一个特殊文件,命名管道和匿名管道区别:命名管道存在于原创 2018-11-14 16:55:05 · 330 阅读 · 0 评论 -
进程间通信--匿名管道
进程通信的目的数据传输:进程间需要数据的传输资源共享:两个或多个进程共享相同资源通知事件:当事件发生时需要通知另一个进程进程控制:一个进程需要控制另一个进程运行时,如调试程序进程间通信的方式管道:匿名管道和有名管道 system V IPC: system 共享内存,system 消息队列,system 信号量posix IPC:消息队列,共享内存,信号量,信号量集,条件变量...原创 2018-11-11 10:49:09 · 585 阅读 · 0 评论 -
Linux进程控制--进程替换
Linux进程替换使用fork创建的进程和父进程运行的相同的程序(执行不同的代码分支),子进程需要运行其他程序需要通过exec函数进行进程替换运行另一个程序。替换函数exec函数总共有六个int execl(const char *path, const char *arg, …);int execlp(const char *file, const char *arg, …);int...原创 2018-11-07 19:22:19 · 639 阅读 · 0 评论 -
Linux虚拟地址空间
Linux虚拟地址空间注:本文来自多篇博客整理,具体博客链接在博客下方在多任务操作系统中,每个进程都运行在属于自己的内存沙盘中。这个沙盘就是虚拟地址空间(Virtual Address Space),在32位模式下它是一个4GB的内存地址块,这篇博客均是X86架构的1. 地址空间分布2. 内核地址空间其中高1G为内核空间,所有进程共享内核地址空间,内核空间分三部分:DMA映射区,一致映...转载 2018-11-02 21:18:47 · 2198 阅读 · 0 评论 -
Linux进程控制--进程退出和等待
Linux进程退出1. 进程退出的场景代码运行完毕正常退出,结果正确代码运行完毕正常退出,结果不正确异常退出2 .进程常见退出方式正常退出从main() 函数中返回return退出调用exit()函数退出调用_exit()函数退出异常退出由信号终止returnreturn是常见的进程退出方式,执行return等同于执行exit函数,main()函数中return ...原创 2018-11-03 21:44:45 · 3039 阅读 · 0 评论 -
实现一个简单的shell
#include <unistd.h>#include <string>#include <errno.h>#include <string.h>#include <vector>#include <iostream>#include <sys/types.h>#include <sys原创 2019-03-01 21:44:05 · 374 阅读 · 0 评论