From 2eae3e745453c8282fb683e26d320ef8dcef2835 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Wed, 21 Mar 2018 14:28:37 +0800 Subject: [PATCH 1/5] auto commit --- notes/HTTP.md | 54 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/notes/HTTP.md b/notes/HTTP.md index 71dba8da..dc706e08 100644 --- a/notes/HTTP.md +++ b/notes/HTTP.md @@ -4,15 +4,15 @@ * [URL](#url) * [请求和响应报文](#请求和响应报文) * [二、HTTP 方法](#二http-方法) - * [GET:获取资源](#get获取资源) - * [POST:传输实体主体](#post传输实体主体) - * [HEAD:获取报文首部](#head获取报文首部) - * [PUT:上传文件](#put上传文件) - * [PATCH:对资源进行部分修改](#patch对资源进行部分修改) - * [DELETE:删除文件](#delete删除文件) - * [OPTIONS:查询支持的方法](#options查询支持的方法) - * [CONNECT:要求用隧道协议连接代理](#connect要求用隧道协议连接代理) - * [TRACE:追踪路径](#trace追踪路径) + * [GET](#get) + * [POST](#post) + * [HEAD](#head) + * [PUT](#put) + * [PATCH](#patch) + * [DELETE](#delete) + * [OPTIONS](#options) + * [CONNECT](#connect) + * [TRACE](#trace) * [三、HTTP 状态码](#三http-状态码) * [2XX 成功](#2xx-成功) * [3XX 重定向](#3xx-重定向) @@ -77,9 +77,13 @@ URI 包含 URL 和 URN,目前 WEB 只有 URL 比较流行,所以见到的基 客户端发送的 **请求报文** 第一行为请求行,包含了方法字段。 -## GET:获取资源 +## GET -## POST:传输实体主体 +> 获取资源 + +## POST + +> 传输实体主体 POST 主要目的不是获取资源,而是传输存储在内容实体中的数据。 @@ -97,13 +101,17 @@ name1=value1&name2=value2 GET 的传参方式相比于 POST 安全性较差,因为 GET 传的参数在 URL 中是可见的,可能会泄露私密信息。并且 GET 只支持 ASCII 字符,如果参数为中文则可能会出现乱码,而 POST 支持标准字符集。 -## HEAD:获取报文首部 +## HEAD + +> 获取报文首部 和 GET 方法一样,但是不返回报文实体主体部分。 主要用于确认 URL 的有效性以及资源更新的日期时间等。 -## PUT:上传文件 +## PUT + +> 上传文件 由于自身不带验证机制,任何人都可以上传文件,因此存在安全性问题,一般不使用该方法。 @@ -116,7 +124,9 @@ Content-length: 16

New File

``` -## PATCH:对资源进行部分修改 +## PATCH + +> 对资源进行部分修改 PUT 也可以用于修改资源,但是只能完全替代原始资源,PATCH 允许部分修改。 @@ -130,7 +140,9 @@ Content-Length: 100 [description of changes] ``` -## DELETE:删除文件 +## DELETE + +> 删除文件 与 PUT 功能相反,并且同样不带验证机制。 @@ -138,13 +150,17 @@ Content-Length: 100 DELETE /file.html HTTP/1.1 ``` -## OPTIONS:查询支持的方法 +## OPTIONS + +> 查询支持的方法 查询指定的 URL 能够支持的方法。 会返回 Allow: GET, POST, HEAD, OPTIONS 这样的内容。 -## CONNECT:要求用隧道协议连接代理 +## CONNECT + +> 要求用隧道协议连接代理 要求在于代理服务器通信时建立隧道,使用 SSL(Secure Sokets Layer,安全套接字)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。 @@ -154,7 +170,9 @@ CONNECT www.example.com:443 HTTP/1.1

-## TRACE:追踪路径 +## TRACE + +> 追踪路径 服务器会将通信路径返回给客户端。 From 67edc94a0cda3dcc00386abf1419e743a17f327b Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Wed, 21 Mar 2018 14:57:23 +0800 Subject: [PATCH 2/5] auto commit --- notes/Linux.md | 48 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/notes/Linux.md b/notes/Linux.md index 1db2d6d9..a50cb331 100644 --- a/notes/Linux.md +++ b/notes/Linux.md @@ -53,9 +53,9 @@ * [十、I/O 复用](#十io-复用) * [概念理解](#概念理解) * [I/O 模型](#io-模型) - * [select() poll() epoll()](#select-poll-epoll) - * [select() 和 poll() 比较](#select-和-poll-比较) - * [eopll() 工作模式](#eopll-工作模式) + * [select poll epoll](#select-poll-epoll) + * [select 和 poll 比较](#select-和-poll-比较) + * [eopll 工作模式](#eopll-工作模式) * [参考资料](#参考资料) @@ -1058,7 +1058,7 @@ HTTP 服务器即要处理监听套接字,又要处理已连接的套接字, ### 3. 异步-阻塞 -这是 I/O 复用使用的一种模式,通过使用 slect(),它可以监听多个 I/O 事件,当这些事件至少有一个发生时,用户程序会收到通知。 +这是 I/O 复用使用的一种模式,通过使用 select,它可以监听多个 I/O 事件,当这些事件至少有一个发生时,用户程序会收到通知。

@@ -1068,11 +1068,11 @@ HTTP 服务器即要处理监听套接字,又要处理已连接的套接字,

-## select() poll() epoll() +## select poll epoll 这三个都是 I/O 多路复用的具体实现,select 出现的最早,之后是 poll,再是 epoll。可以说,新出现的实现是为了修复旧实现的不足。 -### 1. select() +### 1. select ```c int select (int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); @@ -1082,7 +1082,7 @@ int select (int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct - readset、writeset 和 exceptset 这三个参数指定让内核测试读、写和异常条件的描述符; - timeout 参数告知内核等待所指定描述符中的任何一个就绪可花多少时间。 -### 2. poll() +### 2. poll ```c int poll (struct pollfd *fds, unsigned int nfds, int timeout); @@ -1096,9 +1096,9 @@ struct pollfd { }; ``` -它和 select() 功能基本相同。 +它和 select 功能基本相同。 -### 3. epoll() +### 3. epoll ```c int epoll_create(int size); @@ -1106,15 +1106,34 @@ int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout); ``` -它是 select() 和 poll() 的增强版,更加灵活而且没有描述符限制。它将用户关心的描述符放到内核的一个事件表中,从而只需要在用户空间和内核空间拷贝一次。 +它是 select 和 poll 的增强版,更加灵活而且没有描述符限制。它将用户关心的描述符放到内核的一个事件表中,从而只需要在用户空间和内核空间拷贝一次。 -## select() 和 poll() 比较 +select 和 poll 方式中,进程只有在调用一定的方法后,内核才对所有监视的描述符进行扫描。而 epoll 事先通过 epoll_ctl() 来注册描述符,一旦基于某个描述符就绪时,内核会采用类似 callback 的回调机制,迅速激活这个描述符,当进程调用 epoll_wait() 时便得到通知。 +## select 和 poll 比较 +### 1. 功能 -## eopll() 工作模式 +它们提供了几乎相同的功能,但是在一些细节上有所不同: -epoll() 对文件描述符的操作有两种模式:LT(level trigger)和 ET(edge trigger)。 +- select 会修改 fd_set 参数,而 poll 不会; +- select 默认只能监听 1024 个描述符,如果要监听更多的话,需要修改 FD_SETSIZE 之后重新编译; +- poll 提供了跟多的事件类型。 + +### 2. 速度 + +poll 和 select 在速度上都很慢。 + +- 它们都采取轮询的方式来找到 I/O 完成的描述符,如果描述符很多,那么速度就会很慢; +- select 只使用每个描述符的 3 位,而 poll 通常需要使用 64 位,因此 poll 需要复制更多的内核空间。 + +### 3. 可移植性 + +几乎所有的系统都支持 select,但是只有比较新的系统支持 poll。 + +## eopll 工作模式 + +epoll 对文件描述符的操作有两种模式:LT(level trigger)和 ET(edge trigger)。 - LT 模式:当 epoll_wait() 检测到描述符事件发生并将此事件通知应用程序,应用程序可以不立即处理该事件。下次调用 epoll_wait() 时,会再次响应应用程序并通知此事件。 - ET 模式:当 epoll_wait() 检测到描述符事件发生并将此事件通知应用程序,应用程序必须立即处理该事件。如果不处理,下次调用 epoll_wait() 时,不会再次响应应用程序并通知此事件。 @@ -1125,7 +1144,7 @@ epoll() 对文件描述符的操作有两种模式:LT(level trigger)和 ET ### 2. ET -很大程度上减少了 epoll() 事件被重复触发的次数,因此效率要比 LT 模式高。只支持 No-Blocking,以避免由于一个文件句柄的阻塞读/阻塞写操作把处理多个文件描述符的任务饿死。 +很大程度上减少了 epoll 事件被重复触发的次数,因此效率要比 LT 模式高。只支持 No-Blocking,以避免由于一个文件句柄的阻塞读/阻塞写操作把处理多个文件描述符的任务饿死。 # 参考资料 @@ -1134,3 +1153,4 @@ epoll() 对文件描述符的操作有两种模式:LT(level trigger)和 ET - [Boost application performance using asynchronous I/O](https://www.ibm.com/developerworks/linux/library/l-async/) - [Synchronous and Asynchronous I/O](https://msdn.microsoft.com/en-us/library/windows/desktop/aa365683(v=vs.85).aspx) - [Linux IO 模式及 select、poll、epoll 详解](https://segmentfault.com/a/1190000003063859) +- [poll vs select vs event-based](https://daniel.haxx.se/docs/poll-vs-select.html) From 31ae869e8edb62d20edd816a2d30d9d7218e4bbd Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Wed, 21 Mar 2018 15:31:28 +0800 Subject: [PATCH 3/5] auto commit --- notes/Linux.md | 79 ++++++++++++++++++++-- pics/76a49594323247f21c9b3a69945445ee.png | Bin 0 -> 9216 bytes pics/flow.png | Bin 0 -> 17408 bytes 3 files changed, 73 insertions(+), 6 deletions(-) create mode 100644 pics/76a49594323247f21c9b3a69945445ee.png create mode 100644 pics/flow.png diff --git a/notes/Linux.md b/notes/Linux.md index a50cb331..cf05beab 100644 --- a/notes/Linux.md +++ b/notes/Linux.md @@ -49,7 +49,8 @@ * [awk](#awk) * [九、进程管理](#九进程管理) * [查看进程](#查看进程) - * [查看端口](#查看端口) + * [进程状态](#进程状态) + * [孤儿进程和僵死进程](#孤儿进程和僵死进程) * [十、I/O 复用](#十io-复用) * [概念理解](#概念理解) * [I/O 模型](#io-模型) @@ -995,7 +996,7 @@ dmtsai lines: 5 columns: 9 范例 3:/etc/passwd 文件第三个字段为 UID,对 UID 小于 10 的数据进行处理。 ```text -cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}' +$ cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}' root 0 bin 1 daemon 2 @@ -1005,16 +1006,80 @@ daemon 2 ## 查看进程 -```html -ps aux | grep threadx +### 1. ps + +查看某个时间点的进程信息 + +示例一:查看自己的进程 + +``` +# ps -l ``` -## 查看端口 +示例二:查看系统所有进程 + +``` +# ps aux +``` + +示例三:查看特定的进程 ```html -netstat -anp | grep 80 +# ps aux | grep threadx ``` +### 2. top + +实时显示进程信息 + +示例:两秒钟刷新一次 + +``` +# top -d 2 +``` + +### 3. pstree + +查看进程树 + +示例:查看所有进程树 + +``` +# pstree -A +``` + +### 4. netstat + +查看占用端口的进程 + +``` +# netstat -anp | grep port +``` + +## 进程状态 + +

+ +

+ +## 孤儿进程和僵死进程 + +### 1. 孤儿进程 + +一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被 init 进程(进程号为 1)所收养,并由 init 进程对它们完成状态收集工作。 + +由于孤儿进程会被 init 进程收养,所以孤儿进程不会对系统造成危害。 + +### 2. 僵死进程 + +一个子进程的进程描述符在子进程退出时不会释放,只有当父进程通过 wait 或 waitpid 获取了子进程信息后才会释放。如果子进程退出,而父进程并没有调用 wait 或 waitpid,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵死进程。 + +僵死进程通过 ps 命令显示出来的状态为 Z。 + +系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程。 + +要消灭系统中大量的僵死进程,只需要将其父进程杀死,此时所有的僵死进程就会变成孤儿进程,从而被 init 所收养,这样 init 就会释放所有的僵死进程所占有的资源,从而结束僵死进程。 + # 十、I/O 复用 ## 概念理解 @@ -1154,3 +1219,5 @@ epoll 对文件描述符的操作有两种模式:LT(level trigger)和 ET - [Synchronous and Asynchronous I/O](https://msdn.microsoft.com/en-us/library/windows/desktop/aa365683(v=vs.85).aspx) - [Linux IO 模式及 select、poll、epoll 详解](https://segmentfault.com/a/1190000003063859) - [poll vs select vs event-based](https://daniel.haxx.se/docs/poll-vs-select.html) +- [Linux 之守护进程、僵死进程与孤儿进程](http://liubigbin.github.io/2016/03/11/Linux-%E4%B9%8B%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B%E3%80%81%E5%83%B5%E6%AD%BB%E8%BF%9B%E7%A8%8B%E4%B8%8E%E5%AD%A4%E5%84%BF%E8%BF%9B%E7%A8%8B/) +- [Linux process states](https://idea.popcount.org/2012-12-11-linux-process-states/) diff --git a/pics/76a49594323247f21c9b3a69945445ee.png b/pics/76a49594323247f21c9b3a69945445ee.png new file mode 100644 index 0000000000000000000000000000000000000000..788ba0b121da880ccbacc893c5e91bbc2852e614 GIT binary patch literal 9216 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 DOt4O5 literal 0 HcmV?d00001 diff --git a/pics/flow.png b/pics/flow.png new file mode 100644 index 0000000000000000000000000000000000000000..aa0492a4e84154e69a25591eee0915c081ff89b7 GIT binary patch literal 17408 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 literal 0 HcmV?d00001 From f9e00173c6c1096ab9e845b1b90306ad40e38d4e Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Wed, 21 Mar 2018 15:43:40 +0800 Subject: [PATCH 4/5] auto commit --- notes/Linux.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/notes/Linux.md b/notes/Linux.md index cf05beab..45e7a287 100644 --- a/notes/Linux.md +++ b/notes/Linux.md @@ -50,6 +50,7 @@ * [九、进程管理](#九进程管理) * [查看进程](#查看进程) * [进程状态](#进程状态) + * [SIGCHILD](#sigchild) * [孤儿进程和僵死进程](#孤儿进程和僵死进程) * [十、I/O 复用](#十io-复用) * [概念理解](#概念理解) @@ -1058,8 +1059,23 @@ daemon 2 ## 进程状态 +| 状态 | 说明 | +| :---: | --- | +| R | running or runnable (on run queue) | +| D | uninterruptible sleep (usually IO) | +| S | interruptible sleep (waiting for an event to complete) | +| Z | defunct/zombie, terminated but not reaped by its parent | +| T | stopped, either by a job control signal or because it is being traced| +

+## SIGCHILD + +当一个子进程改变了它的状态时:停止运行,继续运行或者退出,有两件事会发生在父进程中: + +- 得到 SIGCHLD 信号; +- 阻塞的 waitpid(2)(或者 wait)调用会返回。 +

## 孤儿进程和僵死进程 From 4154ec2cd6a204ee435087882b268169436ec1e4 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Wed, 21 Mar 2018 15:58:53 +0800 Subject: [PATCH 5/5] auto commit --- notes/计算机操作系统.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/notes/计算机操作系统.md b/notes/计算机操作系统.md index 0c56070e..bac42e6a 100644 --- a/notes/计算机操作系统.md +++ b/notes/计算机操作系统.md @@ -22,7 +22,8 @@ * [页面置换算法](#页面置换算法) * [五、设备管理](#五设备管理) * [磁盘调度算法](#磁盘调度算法) -* [六、参考资料](#六参考资料) +* [六、链接](#六链接) +* [参考资料](#参考资料) @@ -812,7 +813,9 @@ SCAN 算法在 SSTF 算法之上考虑了磁头的移动方向,要求所请求 CSCAN 对 SCAN 进行了改动,要求磁头始终沿着一个方向移动。 -# 六、参考资料 +# 六、链接 + +# 参考资料 - Tanenbaum A S, Bos H. Modern operating systems[M]. Prentice Hall Press, 2014. - 汤子瀛, 哲凤屏, 汤小丹. 计算机操作系统[M]. 西安电子科技大学出版社, 2001.