日常学习

charles-munger

March 24, 2019

Charles munger —- 查理芒格

芒格 思考问题总是从逆向开始。在其漫长的一生中, 持续不断的研究、收集关于 各种各样的人物、各行各业的企业、以及政府管制、学术研究 等各个领域中 的人类失败的案例。并将那些失败的案例原因 列为 正确决策的检查清单,使自己 在决策中少犯错误。如果要明白人生如何得到幸福, 查理首先研究的是人生如何才能够变得痛苦

很多一流的专家学者, 能够在自己的狭小的研究领域内 做到相对客观,但是一旦离开自己的领域不远。就开始变得主观、教条、僵化,甚至失去了自...


linux-progress-group

February 23, 2019

The linux programming interface

进城组、会话和作业控制

进程组和会话在进程之间形成了一种 两层的层次关系。 进程组: 是 相关进程的集合, 会话: 是 相关进程组的集合。其目的是为了支持shell的作业控制,而定义的抽象概念,使用户通过shell能够交互的在前台或后台运行命令

  1. 进程组: 一个或多个共享同一进程组标识PGID的进程组成。PGID的数值为 进程组首进程的进程ID,该进程为进程组的第一个进程 或创建该进程组的进程,子进程会继承父进程 的PGID...

fifo-pipe

February 05, 2019

The linux programming interface

管道, FIFO

管道是UNIX系统上最古老的一种IPC方法,可以用来在相关进程间传递数据。FIFO 则是 管道 概念的一个变体, 区别在于 FIFO可以用于 任意进程间的通信

管道

  1. shell命令中使用管道最为常见。比如 ls | wc -l, 示意图如下: 为执行该命令, shell创建了两个进程来分别执行ls、wc

  2. 管道的几个特征:
    1. 一个管道是一个字节流 (不存在消息...

linux-interface-socket

January 14, 2019

The linux programming interface

Socket

socket是一种IPC方法, 它允许位于同意主机或者网络连接的不同主机 上的应用程序之间交换数据(第一个被广泛接收的socket API 实现于 1983年,现在这组API 已经被移植到了大部分的计算机系统上)

  1. socket(domain, type, protocol): 系统调用
    • domain: 1)识别 socket 地址的格式 2) 确定范围: 在同一...


linux-interface-04

December 30, 2018

The linux programming interface

文件IO 通用的IO模型


文件描述符: 一个非负整数,来指代打开的文件,其中包括: 管道FIFO socket,终端 设备 普通文件

  1. 标准文件描述符:

    ...
    文件描述符 用途 名称 stdio
    0

linux-interface-07

December 30, 2018

The linux programming interface

内存分配

  1. 在堆上分配内存, 进程可以通过增加堆的大小来分配内存, 堆就是一段长度可变的连续的虚拟内存,初始于 进程未初始化的数据段末尾,随着内存的分配和释放而增减。通常将堆当前内存边界成为 program break
    • brk(vodi * end_data_segment), sbrk(int increment), 两个系统调用可以改变 program break 的位置, 位置调升以后,程序可...

linux-interface-06

December 30, 2018

The linux programming interface

进程

进程 是可执行程序的实例

  1. 进程号 和 父进程号: 每个进程都有一个PID, 唯一标识 某个进程,除了少数(init PID 为1) 之外,多数程序与运行该程序的进程PID没有固定关系。 linux内核限制 进程号小于 32767,当进程号达到这个限制时候,内核将重置进程号计数器,重新从最小的整数开始分配。(进程号计数器会重置为 300, 因为 低于此数值的进程号 为系统进程和守护进程 长期占用, 关于最大进程号 默...

linux-interface-05

December 30, 2018

The linux programming interface

深入探究文件IO


原子操作: 将某一系统调用所要完成的各个动作作为不可中断的操作,一次性加以完成, 是许多系统调用的以正确完成的必要条件
竞争状态是这样一种情形:操作共享资源的两个进程或线程,结果取决于 一个无法预期的顺序,即这些进程获取CPU使用权的先后相对顺序

  1. open, 保证进程是打开文件的创建者,对文件是否存在的检查和创建文件属于同一原子操作。 flags: O_CREAT
  2. fcntl: fcntl...


linux-interface-02

December 06, 2018

The linux programming interface

系统编程概念

无论何时,执行了系统调用或者库函数,检查调用的返回状态以确定调用是否成功,是一条编程铁律。(消灭nil就好了)

系统调用

借助这一机制,进程可以请求内核以自己的名义去执行动作,以API 的形式,内核提供一系列服务供程序访问。(创建进程, IIO操作等)可以参考 csapp中的 异常控制流章节。

系统调用有以下特征:

  1. 系统调用将CPU 从用户态切换到 内核态,以便CPU访问受保护的内存等(越过...

linux-interface

November 11, 2018

The linux programming interface

基本概念

内核

  1. 通常的定义,1)完整的软件包, 这包括用来管理计算机资源的核心软件 以及附带的标准软件工具(shell,图形用户界面, 文件工具)2) 狭义的层面,是指管理和分配计算机资源的核心软件
  2. 职责: 1)进程调度, 2)内存管理, 3)文件系统, 4)创建和终止进程, 5)设备管理, 6)联网, 7)提供系统调用的编程接口
  3. 内核态、用户态: 区分态的原因: 1)只有cpu处于内核态的时候,才能执行某些...

Page 3 of 8