操作系统
yyyzhhhhh
123
展开
-
多线程与信号
1.每个线程都有自己屏蔽信号的mask2.action函数不能指定,只能继承主线程3.当进程收到一个信号时,会遍历所有线程,把信号传递给第一个可以传递的线程(即没有屏蔽这个信号)参考:https://www.cnblogs.com/coding-my-life/p/4782529.html...原创 2020-09-19 23:46:26 · 100 阅读 · 0 评论 -
Linux线程模型
https://zhuanlan.zhihu.com/p/57349087转载 2020-09-19 23:10:29 · 108 阅读 · 0 评论 -
静态库和动态库
https://blog.csdn.net/qq_41786318/article/details/79545018转载 2020-09-19 21:41:10 · 89 阅读 · 0 评论 -
死锁条件、预防、避免、检测、解除
https://blog.csdn.net/jgm20475/article/details/81297819条件:1.互斥条件2.请求与保持3.不可剥夺4.循环等带预防:1.原子操作2.一次分配所有资源3.申请资源前先释放别的4.资源申请顺序避免:银行家算法:分配资源前先计算这次分配是否会产生死锁检测:画出资源分配图,看看有没有循环引用解除:直接剥除进程的资源...原创 2020-09-19 19:45:37 · 158 阅读 · 0 评论 -
Linux信号机制
https://blog.csdn.net/qq_37653144/article/details/81942026简单说,就是每个PCB有一个信号域,每收到一个信号,内核就会在该信号域置位,当程序从内核态返回到用户态时,就检查该信号域,发现产生了信号就去执行相应的信号处理函数。...转载 2020-09-14 15:38:17 · 190 阅读 · 0 评论 -
多线程中子线程调用fork,会复制其他线程吗
不会,只会复制当前的线程参考:https://www.cnblogs.com/liyuan989/p/4279210.html转载 2020-09-12 14:55:27 · 784 阅读 · 0 评论 -
Linux中的上下文
上下文的种类:用户级上下文:其实就是虚拟内存(mm_struct),包括数据段,代码段,堆栈,mmap等内核级上下文:内核栈硬件级:寄存器(PC,IP,BP,SP,CR3等)上下文切换类型:1.进程/线程上下文切换:1.2.3都会发生,上下文存储在用户栈2.内核上下文切换:只发生2.3,上下文存储在内核栈,内核栈每个线程都有一个3.中断上下文切换:只发生3,上下文存储在中断栈,中断栈一般每个处理器一个补充:在发生虚拟内存的切换时,需要切换页表,而页表的切换一般会导致TLB无效,同时,由于高速原创 2020-09-03 16:34:05 · 581 阅读 · 0 评论 -
用户栈,线程栈和内核栈
用户栈是fork后共享的主线程的栈;线程栈是主线程通过mmap生成的,存储在task_struct->mm_struct->vm_area_struct中,实际上其他线程也是能看到的;内核栈存储在task_strcut->stack中,每个线程都有一个...原创 2020-09-03 15:15:39 · 477 阅读 · 0 评论 -
创建一个守护进程
https://www.cnblogs.com/justart/p/7726994.html原创 2020-08-31 02:16:58 · 107 阅读 · 0 评论 -
linux五种io模型
同步io:阻塞、非阻塞、io多路复用、信号驱动io(不常见)异步iohttps://www.jianshu.com/p/486b0965c296原创 2020-08-31 00:54:36 · 86 阅读 · 0 评论 -
nohup和&
nohup:执行的命令不会被挂起,但是会占用前台,关闭中断不会终止&:将命令后台执行,不占用前台,但是关闭中断就会终止nohup+&:命令不会被挂起,且后台执行,不占用前台,关闭中断不会终止ctrl+Z:将前台命令放到后台执行...原创 2020-08-28 23:38:29 · 114 阅读 · 0 评论 -
SIGINT、SIGTERM、SIGKILL区别
SIGINT和SIGTERM:ctrl+C触发的是SIGINT,别的没区别SIGINT SIGTERM和SIGKILL:前两者可以被捕获、处理,所以不一定会使程序退出后者不能被捕获,一定会使程序退出原创 2020-08-28 23:25:36 · 1006 阅读 · 0 评论 -
编译型语言和解释型语言的区别
编译型:优点:需要先编译,再执行,执行效率高缺点:某个模块改动,整个文件需要重新编译;需要为不同平台编译出不同的可执行文件,兼容性差解释型:优点:某个地方需要改动直接修改即可;平台兼容性好,因为解释器会运行一个虚拟机缺点:一边解释,一边执行,效率较低...原创 2020-08-28 23:04:28 · 122 阅读 · 0 评论 -
linux elf文件 动态链接库的加载
首先elf文件包括1.可重定位文件:就是.o文件,用来连接生成可执行文件2.可执行文件,就是.out或.bin文件3.共享文件,就是.so或.a文件结构1.ELF header:管理下面3个table2.Program header table:用于可执行文件或共享文件,提供程序入口,代码段和数据段,里面包含多个segment(段),一个segment包含多个section3.Section header table:包含多个section,用于描述文件的静态信息4.Symbol table原创 2020-08-24 19:19:32 · 660 阅读 · 0 评论 -
死锁的条件和避免
https://www.cnblogs.com/bopo/p/9228834.html1.互斥2.请求和保持,请求别的资源,自己的又不放3.不可抢夺,不能被他人抢夺4.循环等待解决:1.原子操作2.一次分配所有资源3.申请别的资源前先释放已申请的资源4.规定资源申请的顺序...原创 2020-05-18 17:37:12 · 105 阅读 · 0 评论 -
Linux中的上下文切换
1.CPU上下文:程序计数器、CPU状态(一些寄存器)2.进程上下文:虚拟内存、用户堆栈3.内核上下文:内核堆栈、寄存器进程切换需要1、2、3系统调用需要1、3中断需要1、3参考:https://segmentfault.com/a/1190000017457234...转载 2020-05-17 10:59:43 · 234 阅读 · 0 评论 -
子进程从父进程继承和不继承的东西
知道子进程自父进程继承什么或未继承什么将有助于我们。下面这个名单会因为 不同Unix的实现而发生变化,所以或许准确性有了水份。请注意子进程得到的是 这些东西的 拷贝,不是它们本身。由子进程自父进程继承到:进程的资格(真实(real)/有效(effective)/已保存(saved) 用户号(UIDs)和组号(GIDs))环境(environment)堆栈内存打开文件的描述符(注意对应的文件的位置由父子进程共享, 这会引起含糊情况)执行时关闭(close-on-exec) 标志 (译者注:clo转载 2020-05-16 11:04:19 · 1129 阅读 · 0 评论 -
父子进程与僵尸进程
情况1:父进程比子进程先结束。当子进程结束时,检查父进程的状态,得知父进程已结束,则把父进程重置为init,由其帮忙收尸情况2:子进程先结束子进程先结束,发现父进程仍在运行,那么就向父进程发送信号SIGCHLD,对于父进程,有3种策略:1.选择忽略SIGCHLD,signal(SIGCHLD,SIG_IGN),那么收到信号后自动把子进程过继给init,让其帮忙收尸2.调用wait给子进程收尸3.什么也不做,那么子进程一直处于僵尸状态,直到父进程结束,此时把子进程过继给init,让其帮忙收尸。该原创 2020-05-11 21:29:54 · 369 阅读 · 0 评论 -
父子进程轮流写同一个文件
因为父子进程共享同一个文件描述符,父进程写"aaa",子进程写"bbb",那么可能会出现两种情况1.使用write,因为不带缓冲,文件可能是"aaabbb"2.使用fwrite,因为带缓冲,文件可能是"aababb"参考:https://blog.csdn.net/yangbodong22011/article/details/63064166/...转载 2020-04-25 13:18:48 · 1191 阅读 · 0 评论 -
write和fwrite的区别
https://www.cnblogs.com/ldp-web/archive/2011/10/21/2220180.html转载 2020-04-25 13:11:06 · 2990 阅读 · 0 评论 -
内核级线程和用户级线程
参考:https://www.cnblogs.com/feng9exe/p/7890934.html1.核支持线程是OS内核可感知的,而用户级线程是OS内核不可感知的。2.用户级线程的创建、撤消和调度不需要OS内核的支持,是在语言(如Java)这一级处理的;而内核支持线程的创建、撤消和调度都需OS内核提供支持,而且与进程的创建、撤消和调度大体是相同的。3.用户级线程执行系统调用指令时将导致...转载 2020-04-25 01:24:28 · 198 阅读 · 0 评论 -
在进程之间传递文件描述符
https://blog.csdn.net/sparkliang/article/details/5486069转载 2020-04-23 21:48:16 · 303 阅读 · 0 评论 -
fork后子进程继承的属性
https://www.cnblogs.com/embedded-linux/p/7256759.html注意父进程的锁也是会被继承的,一般的解决方法是1.先释放所有锁,再fork2.fork后,父子进程都释放所有锁转载 2020-04-23 17:27:58 · 234 阅读 · 0 评论 -
wait和waitpid的区别
wait:等待任意一个子进程结束,若没有,则阻塞waitpid:等待指定的子进程结束,可以选择非阻塞方式参考:https://www.cnblogs.com/yusenwu/p/4655286.html原创 2020-04-18 23:19:53 · 181 阅读 · 0 评论 -
fflush和fsync
fflush:把缓冲区的数据调用write函数写到内核缓冲区。fsync:是把内核缓冲刷到磁盘上。c库缓冲-----fflush---------〉内核缓冲--------fsync-----〉磁盘参考:https://blog.csdn.net/abcd1f2/article/details/53436244...原创 2020-04-18 23:15:26 · 337 阅读 · 0 评论 -
CPU调度算法
非抢占:先来先服务(FCFS),最短任务优先(SJF)抢占:最短完成时间优先(STCF),时间片(RR),多级反馈队列原创 2020-04-18 22:42:31 · 219 阅读 · 0 评论 -
操作系统内存管理
1.内存的分配和回收(连续分配还是非连续分配(段,页,段页),现代操作系统都是非连续分配)2.用户空间到物理空间的转换(段表,页表,段页表)3.内存扩充(虚拟内存,交换技术)4.内存保护(保证各个进程的内存相互独立,一般页表就能保证了)参考:https://www.cnblogs.com/0123wtdd/p/10936308.html...原创 2020-04-18 17:49:10 · 88 阅读 · 0 评论 -
updating homebrew太慢的解决方法
https://www.cnblogs.com/tulintao/p/11134877.html转载 2020-04-17 17:45:25 · 1367 阅读 · 0 评论 -
valgrind的使用
https://www.cnblogs.com/AndyStudy/p/6409287.html转载 2020-04-17 17:44:54 · 102 阅读 · 0 评论 -
函数调用过程栈指针的变化
https://blog.csdn.net/zhuoya_/article/details/80516246转载 2020-04-16 23:56:35 · 710 阅读 · 0 评论 -
linux怎么查看进程的路径
1.ps -ef | grep xxx得到进程id2.ls -l /proc/id/exe即可得到进程的路径原创 2020-04-16 22:17:03 · 1319 阅读 · 0 评论 -
指令重排发生在什么阶段
答案:运行时因为cpu是流水线执行指令的,指令之间会相互影响,导致重排https://blog.csdn.net/lindanpeng/article/details/72459493原创 2020-04-14 01:20:51 · 1021 阅读 · 0 评论 -
ptmalloc和tcmalloc
两者都是malloc的升级版https://blog.csdn.net/z_ryan/article/details/79950737https://blog.csdn.net/junlon2006/article/details/77854898原创 2020-04-12 23:18:10 · 179 阅读 · 0 评论 -
Linux文件锁、区域锁
https://www.cnblogs.com/52php/p/5811965.html转载 2020-04-11 23:58:13 · 209 阅读 · 0 评论 -
gdb常用命令及用gdb调试coredump
gdb常用命令:https://blog.csdn.net/niyaozuozuihao/article/details/91802994gdb调试coredump:https://blog.csdn.net/u014403008/article/details/54174109转载 2020-04-09 12:01:29 · 503 阅读 · 0 评论 -
Linux可重入锁
可重入锁也叫递归锁。简单地说,可重入锁就是同一个线程,在请求一把锁时,若锁被使用,且锁主人是其他线程,则阻塞;若锁主人是自己,则获得该锁。也就是说,当一个线程获得一把锁时,该线程能够进入所有需要该锁的临界区而不会死锁。比如A方法和B方法都要获得某把锁,线程执行了A方法但不释放,此时线程仍能获得锁执行B方法。在Linux下锁默认是非递归锁,需要自己手动设置为递归锁。参考:https://blog...原创 2020-04-08 13:52:19 · 763 阅读 · 0 评论 -
Linux进程间通信,信号量
https://blog.csdn.net/dove1202ly/article/details/79999540转载 2020-04-08 13:30:43 · 90 阅读 · 0 评论 -
Linux消息队列
https://blog.csdn.net/wei_cheng18/article/details/79661495转载 2020-04-08 13:03:09 · 89 阅读 · 0 评论 -
静态链接和动态链接、装载
https://blog.csdn.net/yyf0986/article/details/77532216https://www.cnblogs.com/acSzz/p/5743789.html转载 2020-04-07 01:30:13 · 137 阅读 · 0 评论 -
Linux中的进程栈、线程栈、内核栈、中断栈
https://blog.csdn.net/yangkuanqaz85988/article/details/52403726转载 2020-04-07 00:24:18 · 203 阅读 · 0 评论