3.2 进程描述符及任务结构 内核把进程的列表存放在任务队列 task list 的双向循环链表中。链表中的每一项都是类型为 struct task_struct 的结构体,称为进程描述符,定义在linux/sched.h中。 3.2.1 分配进程描述符 linux 通过 slab 分配器分配 task_struct 结构,在栈底创建一个新的结构体 struct thread_info, 在<asm/thread_info.h>中定义。 3.2.2 进程描述符的存放 内核通过 PID 来标识每个进程,PID 类型为 pid_t, 其实就是 int 类型。 3.2.3 进程状态 struct task_struct 的 __state 成员表示进程的状态,只有五种状态: TASK_RUNNING: 进程可执行,或者正在执行,或者在运行队列中等待执行。 TASK_INTERRUPTIBLE: 进程正在睡眠 (被阻塞), 等待某些条件的达成。 TASK_UNINTERRUPTIBLE: 不可中断的睡眠状态 TASK_TRACED: 被其他进程跟踪的进程 TASK_STOPPED: 进程停止执行 3.2.4 设置当前进程状态 set_task_state(task, state) 函数用于设置进程的状态。 set_current_state(state) 函数用于设置当前进程的状态。 最新的 linux kernel 中没有 set_task_state() 了。 3.2.5 进程上下文 3.2.6 进程家族树 Unix 系统的进程之间存在一个明显的继承关系。所有进程都是 PID 为 1 的 init 进程的后代。...
Posts
4.1 多任务 多任务系统可以划分为两类:非抢占式多任务和抢占式多任务。 Linux 的进程调度 CFS 完全公平调度算法。
Chapter 1 计算机网络和因特网 1.1 什么是因特网 端系统通过通信链路和分组交换机连接到一起. 通信链路: 同轴电缆, 铜线, 光纤, 无线电频谱. 分组交换机: 路由器, 链路层交换机. ISP: 因特网服务提供商. 因特网标准由 IETF 研发, IETF 标准文档称为 RFC. 1.2 网络边缘 主机 = 端系统. 主机可以划分为 client 和 server. 1.2.1 接入网 接入网是将端系统物理链接到其边缘路由器的网络. 家庭接入: DSL, 电缆, FTTH, 拨号和卫星. 1.2.2 物理媒体 1.3 网络核心 1.3.1 分组(packet)交换 1.存储转发机制 就是收到完整一个 packet 才会往输出链路发送数据。 2.排队时延和分组丢失 分组交换机具有输出缓存。 在输出缓存等待的时间为排队时延。 如果输出缓存满了则会产生分组丢失(丢包) 3.转发表和路由选择协议 每台路由器具有一个转发表。 路由选择协议 1.3.2 电路交换 通过网络链路和交换机移动数据有两种方法:电路交换和分组交换。
Chpater 2 应用层 2.1 应用层协议原理 2.1.1 网络应用程序体系结构 client-server 结构 P2P 结构 2.1.2 进程通信 主机由IP 地址标识。 端口号用于标识主机上的特定进程或服务。 2.2 Web 和 HTTP 2.2.1 HTTP 概况 超文本传输协议 (HyperText Transfer Protocol), HTTP. URL 格式: Protocol://user:psw@host:port/path Protocol: 协议名. user:psw: 登录名和密码. host: 主机名. port: 端口号. path: 路径。 RTT: 往返时间,指从客户机到服务器再返回客户机的总时间。 2.2.2 非持续连接和持续连接 非持续连接:每个请求/相应都是经过一个单独的 TCP 连接发送。每次都要三次握手建立连接。 持续连接:所有的请求和相应都是经过相同的 TCP 连接发送。 2.2.3 HTTP 报文格式 HTTP 报文分为请求报文和响应报文。 请求报文 典型的 HTTP 请求报文: GET /somedir/page.html HTTP/1.1 Host: www.someschool.edu Connection: close User-agent: Mozilla/5.0 Accept-language: fr 用普通的 ASCII 文本书写,每行以回车和换行符结束。...
4.1 网络层概述 4.1.1 转发和路由选择:数据平面和控制平面 转发 (forwarding):将 从一个输入链路接口转移到适当的输出链路接口的路由器本地动作。转发发生的时间尺度很短 (通常为几纳秒),因此通常用硬件来实现。 路由 (routing):指确定分组从源到目的地所采取的端到端路径的网络范围处理过程。路由选择发生的时间尺度长得多 (通常为几秒),因此通常用软件来实现。 每台网络路由器中有一个关键元素是它的转发表 (forwarding table)。 路由器检査到达分组首部的一个或多个字段值,进而使用这些首部值在其转发表中索引,通过这种方法来转发分组。 控制平面有传统方法和 SDN(Software Defined Networking) 方法。 传统方法:每个路由器中的控制器使用一个独立算法来计算其转发表。 SDN 方法:路由选择设备仅执行转发,而远程控制器计算并分发转发表。 4.2 路由器工作原理
Ch1 摄影家的眼力 一幅好照片要有一个鲜明主题 一幅好照片要有一个吸引注意力的主体 一幅好照片必须画面简洁
Ch2 照相机和镜头 2.5 镜头 2.6 镜头速度 2.7 光圈 开大一档光圈,进入照相机的光量会加倍;缩小一档光圈,光量将减半。 f值的完整序列如下: f/1, f/1.4, f/2, f/2.8, f/4, f/5.6, f/8, f/11, f/16, f/22, f/32, f/44, f/64 如果镜头的最大光圈为f/2.8, 那么这个镜头称为f/2.8镜头。 2.8 焦距 2.9 焦距和影像大小的关系 2.10 标准镜头,广角镜头,远摄镜头 2.11 折反射镜头 2.12 变焦镜头 2.13 微距镜头 2.14 眩光 明亮的光线通过镜头时,一部分光线会被这些透镜反射回去,形成一种幻影。 清洁镜头要小心把镀膜层擦掉。 2.15 透视畸变 2.16 肖像镜头 85~135mm焦距的镜头,适合拍摄肖像。 2.17 线性畸变 2.18 鱼眼镜头
Ch3 如何使用照相机 3.1 取景系统 3.2 旁轴取景器和测距器 3.3 单镜头反光(SLR)取景器 3.4 双镜头反光(TLR)取景器 3.5 毛玻璃取景器 3.6 聚焦 被摄体离多远,就设置镜头筒聚焦标尺到那个数字。 3.8 景深 当某一物体聚焦清晰时,从该物体前面的某一段距离到其后面的某一段距离内的所有景物也是清晰的,这段距离称为景深。 光圈控制景深 光圈越小,景深越大。 光圈越大,景深越小。 焦距控制景深 焦点越远,景深越大。 景深标尺 // TODO: 插图 在景深标尺上找到当前设定光圈的值,这两个值对应的距离标尺上的两个值,就是景深范围。 3.11 快门速度 T门:按下快门开始曝光,再次按闭合。 B门:按下快门开始曝光,松开闭合。 手持拍摄时,最慢的快门速度要大于等于镜头焦距毫米数的倒数,50mm焦距的镜头,快门速度至少是1/50s。 为了留有余地,最好使用1/100s以上的快门速度。
安装 Zsh 安装 zsh: sudo apt install zsh 设置 zsh 为 default shell: chsh -s $(which zsh) echo $SHELL # 检查当前shell 安装 Oh My Zsh 及插件 安装 Oh My Zsh: sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" Theme 主题安装到~/.oh-my-zsh/custom/theme目录下。 使用网上推荐的 powerlevel10k: git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k 在.zshrc 中配置主题: ZSH_THEME="powerlevel10k/powerlevel10k" Plugins 主题安装到~/.oh-my-zsh/custom/plugin目录下。 zsh-autosuggestions 智能补全命令的插件,按下右键可以快速采用建议。 git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions zsh-syntax-highlighting 智能检查输入命令语法的插件。 git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting z oh-my-zsh 自带的智能跳转文件夹的插件。 用法: 可以模糊补全,不用输入整个文件夹的名称。 配置 Download https://github.com/YC-Xiang/dotfiles 中的 ....
Data Structure struct thermal_zone_device { int id; char type[THERMAL_NAME_LENGTH]; struct device device; struct attribute_group trips_attribute_group; struct thermal_attr *trip_temp_attrs; struct thermal_attr *trip_type_attrs; struct thermal_attr *trip_hyst_attrs; enum thermal_device_mode mode; void *devdata; struct thermal_trip *trips; int num_trips; unsigned long trips_disabled; /* bitmap for disabled trips */ unsigned long passive_delay_jiffies; unsigned long polling_delay_jiffies; int temperature; int last_temperature; int emul_temperature; int passive; int prev_low_trip; int prev_high_trip; atomic_t need_update; struct thermal_zone_device_ops *ops; struct thermal_zone_params *tzp; struct thermal_governor *governor; void *governor_data; struct list_head thermal_instances; struct ida ida; struct mutex lock; struct list_head node; struct delayed_work poll_queue; enum thermal_notify_event notify_event; bool suspended; }; id: thermal zone unique id。...