操作系统
zj134_
以物喜
展开
-
malloc 底层实现及原理
原文:malloc 底层实现及原理 - 爱笑的张飞 - 博客园文章目录结论具体内容内存分配的原理具体分配过程情况一:malloc 小于 128K 的内存,使用 brk 分配情况二:malloc 大于 128K 的内存,使用 mmap 分配(munmap 释放)摘要:偶尔看到面试题会问到 malloc 的底层原理,今天就来记录一下,毕竟学习要“知其所以然”,这样才会胸有成竹。注:下面分析均是基于 linux 环境下的 malloc 实现。步骤是:先总结结论,再逐步展开结论1)当开辟的空间小于 12转载 2020-10-22 11:24:08 · 1593 阅读 · 0 评论 -
内存管理与虚拟内存
原文:20 张图揭开「内存管理」的迷雾,瞬间豁然开朗_小林coding-CSDN博客转载只为了个人做一些记录文章目录前言正文虚拟内存内存分段内存分页多级页表TLB(页表缓存)段页式内存管理Linux 内存管理总总结结个人记录前言之前有不少读者跟我反馈,能不能写图解操作系统?既然那么多读者想看,我最近就在疯狂的复习操作系统的知识。操作系统确实是比较难啃的一门课,至少我认为比计算机网络难太多了,但它的重要性就不用我多说了。学操作系统的时候,主要痛苦的地方,有太多的抽象难以理解的词语或概念,非常容转载 2020-09-23 10:58:53 · 630 阅读 · 1 评论 -
IO多路复用
原文:IO多路复用机制详解 - Yeang - 博客园,有修改。文章目录一、同步阻塞IO二、同步非阻塞IO三、IO多路复用四、异步IOselect/poll/epollselectpollepoll高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:(1)同步阻塞IO(Blocking IO):即传统的IO模型。(2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOC转载 2020-10-12 10:29:20 · 211 阅读 · 0 评论 -
struct对齐规则
参考了:结构体在内存中的对齐规则 -CSDN博客先看这一段代码:struct A{ char a; int b; double c;};int main(){ A a; cout << sizeof(a) << endl; cout << &a << endl; cout << (void*)&a.a << " " << &a.b << " " << &a原创 2020-09-12 00:50:14 · 2500 阅读 · 0 评论 -
大小端字节序以及如何判断大小端
参考:什么是大小端?如何确定大小端?_wwwlyj123321的博客-CSDN博客不同的cpu(大小端是由cpu决定的)在存储数据的时候会有不同的策略:将低序字节存在起始地址(低地址),叫小端字节序将高序字节存在起始地址(低地址),叫大端字节序如图:假如现有一32位int型数0x12345678,那么其MSB(Most Significant Byte,最高有效字节)为0x12,其LSB (Least Significant Byte,最低有效字节)为0x78,那么:上面的数字使用代码进原创 2020-10-08 21:05:58 · 768 阅读 · 0 评论 -
Linux虚拟地址空间布局
原文:Linux虚拟地址空间布局 - clover_toeic - 博客园文章目录1、内核空间2、栈(stack)3、内存映射段(mmap)4、堆(heap)栈和堆的区别5、BSS段6 数据段(Data)7、代码段(text)8、保留区在多任务操作系统中,每个进程都运行在属于自己的内存沙盘中。这个沙盘就是虚拟地址空间(Virtual Address Space),在32位模式下它是一个4GB的内存地址块。在Linux系统中, 内核进程和用户进程所占的虚拟内存比例是1:3,而Windows系统为2:2(转载 2020-10-08 20:52:00 · 568 阅读 · 0 评论 -
关于fork()
文章目录父子进程有独立的数据段、堆、栈,共享代码段写时复制来自:fork()函数 —— 父子进程资源 - chayounder - 博客园Linux进程管理——fork()和写时复制 - Jessica程序猿 - 博客园《UNIX环境高级编程》#include <unistd.h> pid_t fork( void); 返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1。fork函数用于创建子进程,典型的调用一次,返回两次的函数,其原创 2020-10-07 21:11:16 · 224 阅读 · 0 评论 -
关于死锁
文章目录什么是死锁死锁产生的原因:产生死锁的四个必要条件:处理死锁的方法预防死锁避免死锁检测死锁解除死锁什么是死锁死锁是指两个或两个以上的进程(线程)在运行过程中因争夺资源而造成的一种僵局(Deadly-Embrace) ) ,若无外力作用,这些进程(线程)都将无法向前推进。死锁产生的原因:竞争不可抢占资源引起死锁,例如:系统中只有一台打印机,可供进程P1使用,假定P1已占用了打印机,若P2继续要求打印机打印将阻塞。竞争可消耗资源(临时资源)引起死锁,临时资源包括硬件中断、信号、消息、缓冲区内的原创 2020-10-07 20:47:58 · 100 阅读 · 0 评论 -
关于僵尸进程和孤儿进程
文章目录什么是僵尸进程?僵死进程与孤儿进程的区别?僵死进程的危害如何避免僵尸进程?僵尸进程处理办法wait函数waitpid函数wait与waitpid区别:示例基本来自:linux下的僵尸进程处理SIGCHLD信号 - Jessica程序猿 - 博客园linux 僵死进程及其处理方法_大树叶 技术专栏-CSDN博客《UNIX环境高级编程》仅做个人学习记录什么是僵尸进程?一般情况下,程序调用exit或者return之后,它的绝大多数内存和相关的资源已经被内核释放掉,但是在进程表中这个进程项(e原创 2020-10-07 20:44:43 · 189 阅读 · 0 评论 -
Linux多线程同步
文章目录互斥量(mutex)互斥量的初始化:加锁、解锁、销毁锁条件变量(cond)条件变量初始化等待与激活函数Linux下多线程同步的方式主要有互斥量(互斥锁)、条件变量、信号量以及读写锁等,更详细的可以看《UNIX环境高级编程第11章》。线程同步的作用是什么?为什么要线程同步?关于线程同步,我认为其实并不全是原文说的意思:所谓同步,一般是指:多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他原创 2020-10-06 21:43:42 · 206 阅读 · 0 评论 -
关于零拷贝(文件传输)
原文:原来 8 张图,就可以搞懂「零拷贝」了_小林coding-CSDN博客转载只为个人作批注文章目录前言正文为什么要有 DMA 技术?传统的文件传输有多糟糕?如何优化文件传输的性能?如何实现零拷贝(不使用cpu参与拷贝过程)?mmap + writesendfile使用零拷贝技术的项目PageCache(磁盘高速缓存) 有什么作用?大文件传输用什么方式实现?总结前言磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异转载 2020-09-24 19:48:36 · 527 阅读 · 2 评论 -
互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景
原文:Html/MarkDown互转工具-BeJSON.com转载只为了个人作批注文章目录前言正文互斥锁与自旋锁:谁更轻松自如?读写锁:读和写还有优先级区分?乐观锁与悲观锁:做事的心态有何不同?总结个人记录前言生活中用到的锁,用途都比较简单粗暴,上锁基本是为了防止外人进来、电动车被偷等等。但生活中也不是没有 BUG 的,比如加锁的电动车在「广西 - 窃·格瓦拉」面前,锁就是形同虚设,只要他愿意,他就可以轻轻松松地把你电动车给「顺走」,不然打工怎么会是他这辈子不可能的事情呢?牛逼之人,必有牛逼之转载 2020-09-24 16:07:19 · 138 阅读 · 0 评论 -
关于调度算法
原文:大厂面试爱问的「调度算法」,20 张图一举拿下_小林coding-CSDN博客转载只为了做个人批注文章目录前言正文进程调度算法先来先服务调度算法最短作业优先调度算法高响应比优先调度算法时间片轮转调度算法最高优先级调度算法多级反馈队列调度算法内存页面置换算法最佳页面置换算法先进先出置换算法最近最久未使用的置换算法时钟页面置换算法最不常用算法磁盘调度算法先来先服务最短寻道时间优先扫描算法循环扫描算法LOOK 与 C-LOOK算法前言最近,我偷偷潜伏在各大技术群,因为秋招在即,看到不少小伙伴分转载 2020-09-24 15:06:11 · 189 阅读 · 0 评论 -
关于文件系统
原文:一口气搞懂「文件系统」,就靠这 25 张图了_小林coding-CSDN博客文章目录前言正文文件系统的基本组成虚拟文件系统文件的使用文件的存储连续空间存放方式非连续空间存放方式Unix 文件的实现方式空闲空间管理空闲表法空闲链表法位图法文件系统的结构目录的存储软链接和硬链接文件 I/O缓冲与非缓冲 I/O直接与非直接 I/O阻塞与非阻塞 I/O VS 同步与异步 I/O前言不多 BB,直接上「硬菜」。正文文件系统的基本组成文件系统是操作系统中负责管理持久数据的子系统,说简单点,就是转载 2020-09-23 22:28:22 · 162 阅读 · 0 评论 -
关于进程间通信
原文:凉了!张三同学没答好「进程间通信」,被面试官挂了…_小林coding-CSDN博客转载只为了个人做一些批注文章目录前言正文管道消息队列共享内存信号量信号Socket总结个人记录前言开场小故事炎炎夏日,张三骑着单车去面试花了 1 小时,一路上汗流浃背。结果面试过程只花了 5 分钟就结束了,面完的时候,天还是依然是亮的,还得在烈日下奔波 1 小时回去。面试五分钟,骑车两小时。你看,张三因面试没准备好,吹空调的时间只有 5 分钟,来回路上花了 2 小时晒太阳,你说惨不惨?所以啊,转载 2020-09-23 21:35:03 · 254 阅读 · 0 评论 -
关于多线程同步与互斥
原文;看我稳住「多线程」翻车的现场!_小林coding-CSDN博客文章目录前言正文竞争与协作互斥的概念同步的概念互斥与同步的实现和使用锁信号量生产者-消费者问题经典同步问题哲学家就餐问题读者-写者问题前言先来看看虚构的小故事已经晚上 11 点了,程序员小明的双手还在键盘上飞舞着,眼神依然注视着的电脑屏幕。没办法这段时间公司业绩增长中,需求自然也多了起来,加班自然也少不了。天气变化莫测,这时窗外下起了蓬勃大雨,同时闪电轰鸣。但这一丝都没有影响到小明,始料未及,突然一道巨大的雷一闪而过,办转载 2020-09-23 20:45:13 · 412 阅读 · 0 评论 -
Linux下C++多线程的问题
vscode下提示错误pthread_create未定义的引用,原因是pthread库不是Linux系统默认的库。所以可以使用g++编译,在后面加上 -lpthreadg++ -o xxx xxx.cpp -lpthread原创 2020-09-23 19:34:14 · 163 阅读 · 0 评论 -
进程、线程基础
原文:进程、线程基础知识全家桶,30 张图一套带走_小林coding-CSDN博客转载只为个人做一些记录。文章目录前言正文进程进程的状态进程的控制结构进程的控制进程的上下文切换线程为什么使用线程?什么是线程?线程与进程的比较线程的上下文切换线程的实现调度调度时机调度原则调度算法唠叨唠叨个人记录前言先来看看一则小故事我们写好的一行行代码,为了让其工作起来,我们还得把它送进城(进程)里,那既然进了城里,那肯定不能胡作非为了。城里人有城里人的规矩,城中有个专门管辖你们的城管(操作系统),人家让你转载 2020-09-23 15:47:11 · 368 阅读 · 0 评论