摘要: 1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。 2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。 3、全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域.data,未初始 阅读全文
posted @ 2017-05-19 12:11 Przz 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap: 1.brk是将数据段的(.data)的最高地址指针_edata往高地址推 2.mmap是虚拟地址空间找一个空闲的虚拟内存 如果malloc 阅读全文
posted @ 2017-05-19 12:08 Przz 阅读(396) 评论(0) 推荐(0) 编辑
摘要: 在学习内核之前,因为虚拟内存的关系看过这篇文章,但是有的地方不是很懂。 现在对内核学习一段时间后,感觉这篇博客不错。 虚拟内存: 第一层理解 1.每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构 2.一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到 阅读全文
posted @ 2017-05-19 10:17 Przz 阅读(4045) 评论(0) 推荐(0) 编辑
摘要: 买了《深入Linux内核架构》这本书准备了解一下linux内核机制。但是最开始看了十几页感觉看着很累,本来都准备弃了 过了段时间看见一个面经有linux内核的内容,于是就照着那个先把内存管理学习了下。静下心来看发现这本书还是不错,我跳过了很多细节部分,先对内核管理有个大致了解。 水印+冷热页+伙伴系 阅读全文
posted @ 2017-05-19 10:12 Przz 阅读(465) 评论(0) 推荐(0) 编辑
摘要: ps:参考了很多博客,但是当时没记下链接。。。 互斥器和条件变量用法如下: 上面那个while能换成if吗?答案是不能,否则会导致spurious wakeup虚假唤醒。因为不仅要在pthread_cond_wait前要检查条件是否成立,在pthread_cond_wait之后也要检查。因为pthr 阅读全文
posted @ 2017-05-19 09:56 Przz 阅读(388) 评论(0) 推荐(0) 编辑
摘要: 在create后会创建eventpoll对象保存在一个匿名fd的file struct的private指针中,然后进程睡在等待队列上面。 对于等待的fd,通过poll机制在准备好之后会调用相应的call_back函数。在函数中将当前fd加入对应eventpoll的队列中。 然后唤醒等待队列上面的进程 阅读全文
posted @ 2017-05-19 09:54 Przz 阅读(1224) 评论(0) 推荐(0) 编辑