
s4: 操作系统
涛歌依旧
毕业后就职于华为和腾讯
展开
-
孤儿进程示例分析
父进程创建子进程后, 父进程先挂了, 于是子进程成了孤儿进程, 被新的init进程所领养。 来看代码:#include #include int main(){ int pid = 0; pid = fork(); if(pid < 0) { printf("error1\n"); return 1; } if (0 == pi原创 2017-06-27 07:55:37 · 7483 阅读 · 3 评论 -
线程其实很简单
当年在某公司实习的时候, 涉及到多线程的概念(实际上就是主线程和网络线程), 小师傅问我, 懂不懂线程的概念, 我说不懂, 也确实不懂。 后来要找工作了, 再不懂就不好了, 所以跟大家一起看书, 书上说: 进程是正在运行的程序, 一个进程可以多多少线程。 擦, 无用的废话。 反正我一直没有理解线程是真么, 也没有搞清楚什么是线程, 只是看书上说, 线程可以提高程序效率。 呜呼哀哉。原创 2017-07-30 15:01:59 · 8004 阅读 · 11 评论 -
用linux下的daemon函数来玩守护进程------类似于nohup ./a.out &
前面讲了守护进程, 并且自己也写了一个简单的守护进程, 我们来继续看看更简单的方式:#include #include int main(){ daemon(1, 1); int x = 0; while(1) { printf("hello %d\n", x++); sleep(1); } return 0;} 运行一下./a.out, 可以发现,原创 2017-07-30 16:58:42 · 8018 阅读 · 0 评论 -
别把&和nohup混为一谈, 根本不是同一个东西好不好 ------ 聊聊./a.out & , nohut ./a.out , nohup ./a.out &的区别
在第一家公司工作的时候, 我认识了&,在第二家公司工作的时候, 我认识了nohup, 这就是渊源。 随后, 我就一直糊涂用他们, 但并不懂这两个东西。 网上很多地方是乱扯, 瞎复制, 为什么不自己实践一下呢? 看个小程序:#include <stdio.h>#include <unistd.h>int mai...原创 2017-07-30 16:17:08 · 40293 阅读 · 19 评论 -
守护进程(daemon)很简单------第一次玩setsid函数
守护进程, 说白了, 就是已经成年的进程, 比较独立, 切割了一切与父进程相关的东西。 通常, 我们可以在孤儿进程的基础上做文章, 如下:#include #include #include#include #include #include #include #include int main(){ int pid = fork(); if(pid < 0原创 2017-07-30 16:45:29 · 9148 阅读 · 2 评论 -
后宫佳丽到底有几千?------聊聊页面置换算法之FIFO LRU LFU
先说枯燥的。 很多程序员甚至没有听说过虚拟内存这个概念, 情有可原, 因为虚拟内存机制虚拟得太好, 所以, 很多非计算机专业的人, 根本就没有感知到, 包括我。 虚拟内存号称能虚拟出比实际内存更多的内存, 这是扯淡吗? 如果不是, 它又是怎样做到的呢? 先不说这些。 在古代, 皇帝可谓一手遮天, 想要什么就有什么, 想和谁约会, 就跟谁约会。原创 2017-09-30 21:23:50 · 7165 阅读 · 1 评论 -
计算机是如何启动的?
转载地址:http://www.ruanyifeng.com/blog/2013/02/booting.html 作者:阮一峰计算机是如何启动的?作者: 阮一峰日期: 2013年2月16日从打开电源到开始操作,计算机的启动是一个非常复杂的过程。我一直搞不清楚,这个过程到底是怎么回事,转载 2017-10-21 23:22:08 · 7275 阅读 · 2 评论 -
Windows中vmware(虚拟机) + linux(ubuntu)玩起
玩了一下, 成功, ubuntu挺好的: done原创 2017-11-05 16:05:57 · 7181 阅读 · 0 评论 -
从Windows中虚拟出一个Windows
因为某种需要, 我在Window上装了一个VMware, 然后又从VMware中装一个新Windows, 挺奇葩的。 不过一切OK, 顺利work.原创 2017-12-02 15:23:05 · 7214 阅读 · 1 评论 -
Raspbian:世界上“最小的”操作系统是怎样炼成的?
转载地址:http://www.pingwest.com/building-the-raspbian-os/ 当你花35美元买到一部树莓派(Raspberry Pi)计算机的时候,机器里面是没有预装操作系统(OS)的。这个时候你要自己下载一个OS到SD卡,插到树莓派上重启完成OS的安装。这一切看起来很简便,但你考虑过这个跟树莓派兼容的OS是哪里来的吗?转载 2017-11-25 19:16:00 · 9788 阅读 · 1 评论 -
戏说消息队列的利弊
转载地址:https://www.zhihu.com/question/34243607什么是消息队列?小红是小明的姐姐。小红希望小明多读书,常寻找好书给小明看,之前的方式是这样:小红问小明什么时候有空,把书给小明送去,并亲眼监督小明读完书才走。久而久之,两人都觉得麻烦。后来的方式改成了:小红对小明说「我放到书架上的书你都要看」,然后小红转载 2018-01-29 20:46:56 · 8889 阅读 · 8 评论 -
傻X了:mac上编译的程序放到linux上运行
我当然知道, mac上编译的程序放在linux上无法运行。但我今天居然无意中真就这么干了, 还想, 咦, 怎么运行出错? 也真是傻X了。 ubuntu@VM-0-15-ubuntu:~$ ./s-bash: ./s: cannot execute binary file: Exec format errorubuntu@VM-0-15-ubuntu:~$ ubun...原创 2018-10-13 07:55:59 · 15099 阅读 · 3 评论 -
谈谈误解------为什么select支持的fd数量有限制,而poll/epoll等支持的fd数量没有限制?
很多书本和网上都说: poll/epoll比select好的地方之一在于:select支持的最大fd数量有限制,而poll/epoll等支持的最大fd数量没有限制。 这句话本身没有太多问题, 但我纳闷, 一般来说, 单个进程(在一个典型的linux机器上, 比如我的机器就是这样)能打开的最大fd数据为1024, 你说select能最多能支持1024个fd, 我理解。 但你说poll/epoll原创 2017-06-25 17:21:49 · 12956 阅读 · 4 评论 -
用linux命令和程序实际测试一下单进程能打开的最大的句柄数(也可以说是文件数)------并不一定是1024/2048哈
本文中, 我们继续来做小实验, 看看linux单进程能打开的最大的句柄数(其实也是文件数, 因为linux下一切皆文件嘛), 命令如下:xxxxxx:~/network> ulimit -acore file size (blocks, -c) unlimiteddata seg size (kbytes, -d) unlimitedschedul原创 2017-06-25 15:50:10 · 9573 阅读 · 1 评论 -
tcp超时重传(RTO)之karn算法及其简要实验
我们都知道, tcp是面向连接的可靠传输, 其中的超时重传是可靠性保证之一。 好了, 不扯那么多理论了, 本来来玩一个简要的实验。 前面说过了, telnet ip port命令是在向ip, port发起tcp连接, 假如这个ip, port不存在, 那么客户端自然连接不上, 那么客户端不会因为一次失败而气馁。 试想一下, 你电话给你女朋友, 但你女朋友没有接,原创 2017-06-24 10:25:36 · 11980 阅读 · 1 评论 -
《计算机的心智:操作系统之哲学原理》 邹恒明(这本书写的不错, 非计算机专业的朋友可以读读, 补补操作系统知识和原理)
现在IT这么火, 大家基本都会写个printf("hello world\n");之类的东东, 很多半路出家的人, 热衷于画画界面之类的, 今天画个iOS的Button, 明天再画个Android的Label, 后天倒腾一下MFC的Edit, 或者用Qt弹个框框, 成就感满满的。 其实呢? 这些东西玩玩, 并无坏处,但倘若以为这样就是一个合格的程序员, 那就有点天真的。原创 2015-06-14 15:44:33 · 10986 阅读 · 15 评论 -
进程调度算法之“先来先服务”、“短任务优先”和“时间片轮选”
我们知道, 引入多进程后, 操作系统可以同时将多个进程载入到内存中。 如此一来, 在内存中便有多个进程存在, 但是, 对于单cpu来说, 任何一个时刻, 只有一个进程占据cpu. 那么, 为了让各个进程舒服满意, 操作系统该如何进行进程调度呢(也就是把cpu分配给谁)? 本文, 我们来介绍最简单的三个进程调度算法------“先来先服务”、“短任务优先”和“时间片轮选”。原创 2015-06-14 17:18:46 · 18220 阅读 · 7 评论 -
同时和同步有什么区别?
同时: at the same time 同步: 按步骤顺序执行。 先处理req1, 然后返回rsp1, 然后接收req2, 然后再返回rsp2.原创 2013-10-06 22:23:38 · 12606 阅读 · 5 评论 -
并行和并发有什么区别?
并行: 同时, at the same time 并发: 先做一下A, 再做一下B, 又去做一下A, 又去做一下B. 交替执行, 每个时间点只做一件事。原创 2013-10-06 22:17:58 · 8511 阅读 · 1 评论 -
Windows和Linux的netstat
无论是在Windows中还是在Linux中,均可以在命令行输入netstat来查看网络连接情况,具体用法又有一些差异,但是我们应该学会查阅。 在Windows中,查阅方式为:netstat /? 在Linux中,查阅方式为:man netstat 其余的,我就不说了,既然知道如何查阅,那就大量实践吧。原创 2013-11-02 10:45:30 · 8744 阅读 · 0 评论 -
一幅图简介操作系统的api, cli, gui
原创 2014-05-03 13:09:24 · 8950 阅读 · 1 评论 -
再谈IPC之共享内存 (某公司实习生招聘笔试试题)
我们先来看看原题目:原创 2014-09-25 22:04:47 · 8542 阅读 · 4 评论 -
其实Unix很简单
转载地址:http://blog.youkuaiyun.com/haoel/article/details/1533720/其实Unix很简单 陈皓 很多编程的朋友都在网上问我这样的几个问题,Unix怎么学?Unix怎么这么难?如何才能学好?并且让我给他们一些学好Unix的经验。在绝大多数时候,我发现问这些问题的朋友都有两个特点:1)对Unix有畏难心理,对其没有信转载 2015-04-18 12:10:00 · 7819 阅读 · 0 评论 -
Cache(缓存)和 Buffer(缓冲),主要区别是什么?
转载地址:https://www.zhihu.com/question/26190832俩英文单词,不先看看本义吗?虽然都是抽象单词,但在各个地方都有具象的应用。Buffer常见的是这个:&lt;img src="https://pic4.zhimg.com/v2-b7b66d782898210d7bd22439e9238d转载 2017-04-04 01:59:45 · 17908 阅读 · 0 评论 -
进程终结后, 泄露的堆内存会自动释放吗?
看来个问题, 进程终结后, 泄露的堆内存会自动释放吗? 当然会! 这些堆内存都是与进程生死相关的。 所以, 在很多时候: 1. 重启后台服务是可以释放泄露的内存的, 可以用于临时解决问题。 2. 单例中的堆内存, 不需要人为主动释放。 我们几乎看不到代码中有释放单例的操作。原创 2017-04-02 17:43:40 · 13224 阅读 · 0 评论 -
多核、多进程、多线程对应的英语分别是怎样的?
多核: multiprocessing, 意思就是多重处理, 多个cpu同时干活。 多进程: multiprogramming, 也可以近似认为是multitasking, 意思就是多道程序设计。 单个cpu并发干活, 在不同的进程间切换。 多线程: multithreading, 这个就是我们通常说的多线程, 单个cpu并发干活, 在同一个进程的线程间切换原创 2017-03-26 18:21:07 · 23478 阅读 · 3 评论 -
tcp粘包和nagle算法
在前面的文章中, 我们讨论过tcp粘包问题, 当时考虑的场景是, 如果接收端来不及接受, 那么就会造成粘包, 事实上, 这是tcp粘包的一个原因之一, 这是接收端的粘包。 实际上, 粘包还可能发生在发送端。 接收端的粘包, 基本可以认为是应用程序没有及时读取所造成的。 而发送端的粘包, 则主要归因于TCP nagle算法。 先来看一个生活中的例子原创 2017-06-25 11:54:57 · 8879 阅读 · 1 评论 -
TCP SACK panic漏洞的解释和思考
转载地址:https://blog.youkuaiyun.com/dog250/article/details/93397367最近几天一直在和CVE-2019-11477 SACK panic漏洞进行纠缠,挺有意思的。细节就不多说了,给出几个链接自己看吧:https://access.redhat.com/security/vulnerabilities/tcpsackhttps:...转载 2019-06-30 11:25:55 · 3616 阅读 · 3 评论