linux系统编程
文章平均质量分 75
rock_joker
这个作者很懒,什么都没留下…
展开
-
为什么需要使用栈结构?
在以往学习高级语言时,提到栈,下意识都会反映上来FILO,它是暂存数据的一种数据结构,但是为什么会用到栈?却一直讳莫如深,这是高级语言不会涉及到的底层的实现,最近在学习王爽老师的《汇编语言》,其中有一段点醒了我,现整理如下。(一)这个问题的由来是对如下datasg段中每个单词改写为大写字母。 assume cs:codesg,ds:datasg datasg segment db 'ibm ' db 'dec ' db 'dos ' ..转载 2020-09-08 22:38:47 · 2146 阅读 · 0 评论 -
Redis的使用场景
redis和mysql要根据具体业务场景去选型mysql:数据放在磁盘redis:数据放在内存redis适合放一些频繁使用,比较热的数据,因为是放在内存中,读写速度都非常快,一般会应用在下面一些场景排行榜计数器消息队列推送好友关注,粉丝实现共同关注的功能:本质上是计算连个用户关注的交集,如果使用关系型数据库,它并不支持交集计算工作,要计算两个集合的交集,原创 2017-09-21 11:28:24 · 332 阅读 · 0 评论 -
linux内核学习之进程和线程
Linux进程、线程问题2010年8月15日,今天研究的是linux的进程管理,昨天是内存寻址,感慨颇深啊,《深入理解Linux内核》这本书真是浪得虚名,根本没有说到问题的本质,一些概念的由来、定义、区别以及联系,技术的原理,运行过程,整体结构,各部分衔接等等问题统统没有说明白,甚至根本没说,全书都是Linux的数据结构,及各种变量,接口函数,却根本没说是什么,为什么。对于新手来说简直是灾难,转载 2017-09-01 16:45:44 · 451 阅读 · 0 评论 -
ELF格式与bss段
ELF(Executable Linkable Format)是Linux系统下的一种可执行可链接文件的格式,是COFF格式的变种。在Linux系统中包括了可重定位文件(.o文件),可执行文件(/bin/bash文件),共享目标文件(.so)和核心转储文件(core dump)。ELF文件头(ELF Header):位于ELF文件的头部,包含了描述整个文件的基本属性。代码段(.text):原创 2017-09-07 21:43:49 · 2710 阅读 · 0 评论 -
malloc原理和内存碎片
当一个进程发生缺页中断的时候,进程会陷入内核态,执行以下操作: 1、检查要访问的虚拟地址是否合法 2、查找/分配一个物理页 3、填充物理页内容(读取磁盘,或者直接置0,或者啥也不干) 4、建立映射关系(虚拟地址到物理地址) 重新执行发生缺页中断的那条指令 如果第3步,需要读取磁盘,那么这次缺页中断就是majflt,否则就是minflt。 内存分配的原理从操作转载 2017-03-27 20:28:18 · 459 阅读 · 0 评论 -
linux守护进程的详解与创建
写在前面,守护进程与后台进程的区别:后台进程:默认情况下,进程是在前台运行的,但是在运行的时候使用特殊操作使前台运行的程序放置后台运行,但是如果这个进程所依附的shell终结,就是在后台运行的程序也会被终止。守护进程:类似于一种服务,在开机启动的时候会自动启动,或者通过程序写一个守护进程,下面有讲解关于后台进程的书写规范;还可以通过命令来启动一个后太进程。即使所有的shell都关闭转载 2017-08-05 20:01:17 · 381 阅读 · 0 评论 -
孤儿进程与僵尸进程[总结]
孤儿进程与僵尸进程[总结]1、前言 之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。2、基本概念 我们知道在unix/linux中,正常情况转载 2017-08-05 16:42:25 · 232 阅读 · 0 评论 -
EOF的本质
总结:EOF只是函数的一个返回值,值为十进制-1,十六进制为0xFF,本质上为函数的一个返回值,文件中并不存在EOF我们先一起来看看FILE是怎么定义的: FILE File control structure for streams. typedef struct { short lev原创 2017-05-27 09:12:17 · 1871 阅读 · 0 评论 -
clone的fork与pthread_create创建线程有何不同&pthread多线程编程的学习小结
进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合,这些资源在Linux中被抽象成各种数据对象:进程控制块、虚存空间、文件系统,文件I/O、信号处理函数。所以创建一个进程的过程就是这些数据对象的创建过程。 在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性,但是二者之间的通讯需要通过专门的通讯转载 2017-05-25 09:32:36 · 9359 阅读 · 2 评论 -
Linux信号量 sem_t简介
函数介绍#include信号量的数据类型为结构sem_t,它本质上是一个长整型的数。函数sem_init()用来初始化一个信号量。它的原型为:int sem_init __P ((sem_t *__sem, int __pshared, unsigned int __value));sem为指向信号量结构的一个指针;pshared不为0时此信号量在进程间共享,否则只能为当前进程的所有线转载 2017-03-15 23:22:51 · 634 阅读 · 0 评论 -
乐观锁与悲观锁——解决并发问题
引言为什么需要锁(并发控制)? 在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突。这就是著名的并发性问题。典型的冲突有:丢失更新:一个事务的更新覆盖了其它事务的更新结果,就是所谓的更新丢失。例如:用户A把值从6改为2,用户B把值从2改为6,则用户A丢失了他的更新。脏读:当一个事务读取其它完成一半事务的记录时,就会发生脏读取转载 2017-03-31 18:18:05 · 253 阅读 · 0 评论 -
socketpair理解
今天跟人谈到socketpair的问题,晚上回来写了个程序验证下自己的猜测! 先说说我的理解:socketpair创建了一对无名的套接字描述符(只能在AF_UNIX域中使用),描述符存储于一个二元数组,eg. s[2] .这对套接字可以进行双工通信,每一个描述符既可以读也可以写。这个在同一个进程中也可以进行通信,向s[0]中写入,就可以从s[1]中读取(只能从s[1]中读取),也可转载 2017-03-19 19:36:37 · 304 阅读 · 0 评论 -
系统中断与SA_RESTART
今天在调试程序时,sem_timedwait居然返回了一个Interrupted system call,错误码为EINTR。系统中断这东西我一向只闻其名,不见其"人",不想今天遇上了,脑中一片空白,赶紧上网恶补一下。系统中断,要从慢系统调用(slow system call)说起,请参考 http://blog.csdn.net/benkaoya/article/details/1726转载 2017-03-19 19:29:15 · 1703 阅读 · 0 评论 -
Linux堆内存管理深入分析(下)
0、前言回顾我们在上一篇文章中(Linux堆内存管理深入分析(上)),详细介绍了堆内存管理中涉及到的基本概念以及相互关系,同时也着重介绍了堆中chunk分配和释放策略中使用到的隐式链表技术。通过前面的介绍,我们知道使用隐式链表来管理内存chunk总会涉及到内存的遍历,效率极低。对此glibc malloc引入了显示链表技术来提高堆内存分配和释放的效率。所谓的显示链表就是我们在数转载 2017-03-08 21:44:05 · 565 阅读 · 0 评论 -
Linux堆内存管理深入分析(上)
0、前言近年来,漏洞挖掘越来越火,各种漏洞挖掘、利用的分析文章层出不穷。从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞利用两种。国内关于栈溢出的资料相对较多,这里就不累述了,但是关于堆溢出的漏洞利用资料就很少了。鄙人以为主要是堆溢出漏洞的门槛较高,需要先吃透相应操作系统的堆内存管理机制,而这部分内容一直是一个难点。因此本系列文章主要从Linux系统堆内存管理机制出发,逐步介绍诸转载 2017-03-08 21:42:19 · 1172 阅读 · 1 评论