Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wushizhenking
CS-Notes
提交
11831849
C
CS-Notes
项目概览
wushizhenking
/
CS-Notes
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
CS-Notes
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
11831849
编写于
10月 01, 2018
作者:
C
CyC2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
auto commit
上级
abb0eca7
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
8 addition
and
8 deletion
+8
-8
notes/Socket.md
notes/Socket.md
+2
-2
notes/计算机操作系统.md
notes/计算机操作系统.md
+6
-6
未找到文件。
notes/Socket.md
浏览文件 @
11831849
...
...
@@ -38,7 +38,7 @@ Unix 有五种 I/O 模型:
应用进程被阻塞,直到数据复制到应用进程缓冲区中才返回。
应该注意到,在阻塞的过程中,其它程序还可以执行,因此阻塞不意味着整个操作系统都被阻塞。因为其他程序还可以执行,
因此
不消耗 CPU 时间,这种模型的 CPU 利用率效率会比较高。
应该注意到,在阻塞的过程中,其它程序还可以执行,因此阻塞不意味着整个操作系统都被阻塞。因为其他程序还可以执行,
所以
不消耗 CPU 时间,这种模型的 CPU 利用率效率会比较高。
下图中,recvfrom 用于接收 Socket 传来的数据,并复制到应用进程的缓冲区 buf 中。这里把 recvfrom() 当成系统调用。
...
...
@@ -62,7 +62,7 @@ ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *
它可以让单个进程具有处理多个 I/O 事件的能力。又被称为 Event Driven I/O,即事件驱动 I/O。
如果一个 Web 服务器没有 I/O 复用,那么每一个 Socket 连接都需要创建一个线程去处理。如果同时有几万个连接,那么就需要创建相同数量的线程。
并且
相比于多进程和多线程技术,I/O 复用不需要进程线程创建和切换的开销,系统开销更小。
如果一个 Web 服务器没有 I/O 复用,那么每一个 Socket 连接都需要创建一个线程去处理。如果同时有几万个连接,那么就需要创建相同数量的线程。相比于多进程和多线程技术,I/O 复用不需要进程线程创建和切换的开销,系统开销更小。
<div
align=
"center"
>
<img
src=
"../pics//1492929444818_6.png"
/>
</div><br>
...
...
notes/计算机操作系统.md
浏览文件 @
11831849
...
...
@@ -173,7 +173,7 @@ QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 H
Ⅱ 调度
线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程切换,从一个进程
内
的线程切换到另一个进程中的线程时,会引起进程切换。
线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程切换,从一个进程
中
的线程切换到另一个进程中的线程时,会引起进程切换。
Ⅲ 系统开销
...
...
@@ -181,7 +181,7 @@ QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 H
Ⅳ 通信方面
线程间可以通过直接读
/写同一进程中的数据段来
进行通信,但是进程通信需要借助 IPC。
线程间可以通过直接读
写同一进程中的数据
进行通信,但是进程通信需要借助 IPC。
## 进程状态的切换
...
...
@@ -243,7 +243,7 @@ QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 H
**2.3 多级反馈队列**
如果
一个进程需要执行 100 个时间片,如果采用时间片轮转调度算法,那么需要交换 100 次。
一个进程需要执行 100 个时间片,如果采用时间片轮转调度算法,那么需要交换 100 次。
多级队列是为这种需要连续执行多个时间片的进程考虑,它设置了多个队列,每个队列时间片大小都不同,例如 1,2,4,8,..。进程在第一个队列没执行完,就会被移到下一个队列。这种方式下,之前的进程只需要交换 7 次。
...
...
@@ -338,9 +338,9 @@ void consumer() {
down
(
&
full
);
down
(
&
mutex
);
int
item
=
remove_item
();
consume_item
(
item
);
up
(
&
mutex
);
up
(
&
empty
);
consume_item
(
item
);
}
}
```
...
...
@@ -837,7 +837,7 @@ FIFO 常用于客户-服务器应用程序中,FIFO 用作汇聚点,在客户
为了更好的管理内存,操作系统将内存抽象成地址空间。每个程序拥有自己的地址空间,这个地址空间被分割成多个块,每一块称为一页。这些页被映射到物理内存,但不需要映射到连续的物理内存,也不需要所有页都必须在物理内存中。当程序引用到不在物理内存中的页时,由硬件执行必要的映射,将缺失的部分装入物理内存并重新执行失败的指令。
从上面的描述中可以看出,虚拟内存允许程序不用将地址空间中的每一页都映射到物理内存,也就是说一个程序不需要全部调入内存就可以运行,这使得有限的内存运行大程序
称
为可能。例如有一台计算机可以产生 16 位地址,那么一个程序的地址空间范围是 0
\~
64K。该计算机只有 32KB 的物理内存,虚拟内存技术允许该计算机运行一个 64K 大小的程序。
从上面的描述中可以看出,虚拟内存允许程序不用将地址空间中的每一页都映射到物理内存,也就是说一个程序不需要全部调入内存就可以运行,这使得有限的内存运行大程序
成
为可能。例如有一台计算机可以产生 16 位地址,那么一个程序的地址空间范围是 0
\~
64K。该计算机只有 32KB 的物理内存,虚拟内存技术允许该计算机运行一个 64K 大小的程序。
<div
align=
"center"
>
<img
src=
"../pics//7b281b1e-0595-402b-ae35-8c91084c33c1.png"
/>
</div><br>
...
...
@@ -989,7 +989,7 @@ FIFO 算法可能会把经常使用的页面置换出去,为了避免这一问
优先调度与当前磁头所在磁道距离最近的磁道。
虽然平均寻道时间比较低,但是不够公平。如果新到达的磁道请求总是比一个在等待的磁道请求近,那么在等待的磁道请求会一直等待下去,也就是出现饥饿现象。具体来说,两
边
的磁道请求更容易出现饥饿现象。
虽然平均寻道时间比较低,但是不够公平。如果新到达的磁道请求总是比一个在等待的磁道请求近,那么在等待的磁道请求会一直等待下去,也就是出现饥饿现象。具体来说,两
端
的磁道请求更容易出现饥饿现象。
<div
align=
"center"
>
<img
src=
"../pics//4e2485e4-34bd-4967-9f02-0c093b797aaa.png"
/>
</div><br>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录