charles-munger
Charles munger —- 查理芒格
芒格 思考问题总是从逆向开始。在其漫长的一生中, 持续不断的研究、收集关于 各种各样的人物、各行各业的企业、以及政府管制、学术研究 等各个领域中 的人类失败的案例。并将那些失败的案例原因 列为 正确决策的检查清单,使自己 在决策中少犯错误。如果要明白人生如何得到幸福, 查理首先研究的是人生如何才能够变得痛苦
很多一流的专家学者, 能够在自己的狭小的研究领域内 做到相对客观,但是一旦离开自己的领域不远。就开始变得主观、教条、僵化,甚至失去了自...
linux-progress-group
The linux programming interface
进城组、会话和作业控制
进程组和会话在进程之间形成了一种 两层的层次关系。 进程组: 是 相关进程的集合, 会话: 是 相关进程组的集合。其目的是为了支持shell的作业控制,而定义的抽象概念,使用户通过shell能够交互的在前台或后台运行命令
- 进程组: 一个或多个共享同一进程组标识PGID的进程组成。PGID的数值为 进程组首进程的进程ID,该进程为进程组的第一个进程 或创建该进程组的进程,子进程会继承父进程 的PGID...
fifo-pipe
The linux programming interface
管道, FIFO
管道是UNIX系统上最古老的一种IPC方法,可以用来在相关进程间传递数据。FIFO 则是 管道 概念的一个变体, 区别在于 FIFO可以用于 任意进程间的通信
管道
-
shell命令中使用管道最为常见。比如 ls | wc -l, 示意图如下: 为执行该命令, shell创建了两个进程来分别执行ls、wc
- 管道的几个特征:
- 一个管道是一个字节流 (不存在消息...
linux-interface-socket
The linux programming interface
Socket
socket是一种IPC方法, 它允许位于同意主机或者网络连接的不同主机 上的应用程序之间交换数据(第一个被广泛接收的socket API 实现于 1983年,现在这组API 已经被移植到了大部分的计算机系统上)
- socket(domain, type, protocol): 系统调用
-
domain: 1)识别 socket 地址的格式 2) 确定范围: 在同一...
-
linux-interface-04
The linux programming interface
文件IO 通用的IO模型
文件描述符: 一个非负整数,来指代打开的文件,其中包括: 管道FIFO socket,终端 设备 普通文件
-
标准文件描述符:
文件描述符 用途 名称 stdio 0 ...
linux-interface-07
The linux programming interface
内存分配
- 在堆上分配内存, 进程可以通过增加堆的大小来分配内存, 堆就是一段长度可变的连续的虚拟内存,初始于 进程未初始化的数据段末尾,随着内存的分配和释放而增减。通常将堆当前内存边界成为 program break
- brk(vodi * end_data_segment), sbrk(int increment), 两个系统调用可以改变 program break 的位置, 位置调升以后,程序可...
linux-interface-06
The linux programming interface
进程
进程 是可执行程序的实例
- 进程号 和 父进程号: 每个进程都有一个PID, 唯一标识 某个进程,除了少数(init PID 为1) 之外,多数程序与运行该程序的进程PID没有固定关系。 linux内核限制 进程号小于 32767,当进程号达到这个限制时候,内核将重置进程号计数器,重新从最小的整数开始分配。(进程号计数器会重置为 300, 因为 低于此数值的进程号 为系统进程和守护进程 长期占用, 关于最大进程号 默...
linux-interface-05
The linux programming interface
深入探究文件IO
原子操作: 将某一系统调用所要完成的各个动作作为不可中断的操作,一次性加以完成, 是许多系统调用的以正确完成的必要条件
竞争状态是这样一种情形:操作共享资源的两个进程或线程,结果取决于 一个无法预期的顺序,即这些进程获取CPU使用权的先后相对顺序
- open, 保证进程是打开文件的创建者,对文件是否存在的检查和创建文件属于同一原子操作。 flags: O_CREAT
-
fcntl: fcntl...
linux-interface-02
The linux programming interface
系统编程概念
无论何时,执行了系统调用或者库函数,检查调用的返回状态以确定调用是否成功,是一条编程铁律。(消灭nil就好了)
系统调用
借助这一机制,进程可以请求内核以自己的名义去执行动作,以API 的形式,内核提供一系列服务供程序访问。(创建进程, IIO操作等)可以参考 csapp中的 异常控制流章节。
系统调用有以下特征:
- 系统调用将CPU 从用户态切换到 内核态,以便CPU访问受保护的内存等(越过...
linux-interface
The linux programming interface
基本概念
内核
- 通常的定义,1)完整的软件包, 这包括用来管理计算机资源的核心软件 以及附带的标准软件工具(shell,图形用户界面, 文件工具)2) 狭义的层面,是指管理和分配计算机资源的核心软件
- 职责: 1)进程调度, 2)内存管理, 3)文件系统, 4)创建和终止进程, 5)设备管理, 6)联网, 7)提供系统调用的编程接口
- 内核态、用户态: 区分态的原因: 1)只有cpu处于内核态的时候,才能执行某些...