Skip to content

Commit

Permalink
修改
Browse files Browse the repository at this point in the history
  • Loading branch information
arkingc committed Jun 19, 2018
1 parent f3fc4e4 commit 9c985a3
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 18 deletions.
38 changes: 36 additions & 2 deletions interview/temp/进程线程.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
* **vfork()函数**创建的子进程运行在父进程的地址空间上,子进程对虚拟地址空间数据的修改对父进程都可见,这与fork完全不同,fork是独立地址空间,而vfork是共享父进程空间,为了防止父进程重写子进程需要的数据,父进程被阻塞,直到子进程执行exec()或exit()。vfork是一个过时的应用,vfork最初是因为fork没有实现COW机制,而很多情况下fork之后会紧接着exec,而exec的执行相当于之前fork复制的空间全部变成了无用功,所以设计了vfork。现在fork使用了COW机制,唯一的代价仅仅是复制父进程页表的代价,所以vfork不应该出现在新的代码之中
* **clone()函数**可以有选择性地继承父进程的资源,如果选择共享父进程空间,那么创建的是一个线程,也可以选择不与父进程共享同一空间

[fork](https://github.com/arkingc/note/blob/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/UNIX%E7%8E%AF%E5%A2%83%E9%AB%98%E7%BA%A7%E7%BC%96%E7%A8%8B.md#21-fork)
[vfork](https://github.com/arkingc/note/blob/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/UNIX%E7%8E%AF%E5%A2%83%E9%AB%98%E7%BA%A7%E7%BC%96%E7%A8%8B.md#22-vfork)
* [fork](https://github.com/arkingc/note/blob/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/UNIX%E7%8E%AF%E5%A2%83%E9%AB%98%E7%BA%A7%E7%BC%96%E7%A8%8B.md#21-fork)
* [vfork](https://github.com/arkingc/note/blob/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/UNIX%E7%8E%AF%E5%A2%83%E9%AB%98%E7%BA%A7%E7%BC%96%E7%A8%8B.md#22-vfork)

<br>
<br>
Expand Down Expand Up @@ -37,3 +37,37 @@
- 关闭文件描述符

[参考](http://alfred-sun.github.io/blog/2015/06/18/daemon-implementation/)

<br>
<br>

# 四.进程与线程的限制

## 1.进程与线程数量的限制

### 1)线程数量的限制

**限制**

* 线程的数量取决于线程栈空间的大小(可以使用`ulimit -s`查看栈空间大小)
* 32位Linux下(**可以使用`getconf LONG_BIT`查看当前CPU运行在多少位的模式下**),用户空间是3G,因此可创建的线程数量为`3G/stack_size`,但是理论上除了栈空间每个线程还有线程控制块的开销,所以实际值会小一些

**修改限制**

1. 使用`ulimit -s 新栈空间大小`修改默认栈空间大小
* 可以在`/etc/rc.local` 内 加入 `ulimit -s 新栈空间大小` 则可以开机就设置栈空间大小
2. 通过`/etc/security/limits.conf` 改变栈空间大小:
```
#<domain> <type> <item> <value>
#添加下列行
* soft stack 新栈空间大小
```
重新登录,执行ulimit -s 即可看到改为新栈空间大小
* [linux下进程的最大线程数、进程最大数、进程打开的文件数](http://www.cnblogs.com/niocai/archive/2012/04/01/2428154.html)
* [linux查看修改线程默认栈空间大小](https://www.cnblogs.com/baiduboy/p/6121197.html)
> [线程的限制](https://github.com/arkingc/note/blob/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/UNIX%E7%8E%AF%E5%A2%83%E9%AB%98%E7%BA%A7%E7%BC%96%E7%A8%8B.md#1%E7%BA%BF%E7%A8%8B%E9%99%90%E5%88%B6)
### 2)进程数量的限制
33 changes: 17 additions & 16 deletions interview/操作系统.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,21 @@
- 1)进行间通信的方式?([管道、消息、共享内存、信号量、信号](https://github.com/arkingc/note/blob/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.md#3unix%E5%B9%B6%E5%8F%91%E6%9C%BA%E5%88%B6)、套接字)
- 2)[进程和线程的区别联系](https://github.com/arkingc/note/blob/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.md#1%E8%BF%9B%E7%A8%8B%E4%B8%8E%E7%BA%BF%E7%A8%8B)?(组成、效率、通信、安全性)
- 3)[进程的地址空间布局](https://blog.csdn.net/yusiguyuan/article/details/45155035)
- 4)[一个进程可以创建多少线程,和什么有关](https://blog.csdn.net/great3779/article/details/5930190)
- 5)程序状态字(PSW)?(一个或一组处理器寄存器,包含有进程的状态信息)
- 6)进程[创建的步骤](https://github.com/arkingc/note/blob/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.md#21-%E8%BF%9B%E7%A8%8B%E7%9A%84%E5%88%9B%E5%BB%BA%E4%B8%8E%E7%BB%88%E6%AD%A2)
- 7)进程[切换的步骤](https://github.com/arkingc/note/blob/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.md#42-%E8%BF%9B%E7%A8%8B%E5%88%87%E6%8D%A2)
- 8)一个程序从开始运行到结束的完整过程
- 9)[线程分配什么?TCB(线程控制块)?](https://github.com/arkingc/note/blob/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.md#1%E8%BF%9B%E7%A8%8B%E4%B8%8E%E7%BA%BF%E7%A8%8B)
- 10)[线程共享进程的什么?不共享什么?CPU共享吗?](https://github.com/arkingc/note/blob/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.md#1%E8%BF%9B%E7%A8%8B%E4%B8%8E%E7%BA%BF%E7%A8%8B)
- 11)怎样保证一个CPU只有一个线程运行?([CPU核数与多线程](https://blog.csdn.net/qq_33530388/article/details/62448212)
- 12)Linux线程间通信(互斥量、信号量、条件变量)
- 13)[线程有什么状态?](https://github.com/arkingc/note/blob/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.md#2%E7%BA%BF%E7%A8%8B%E7%8A%B6%E6%80%81)
- 14)线程池的了解、优点、调度处理方式和保护任务队列的方式?
- 15)Linux线程间通信的方式?(互斥量、信号量、条件变量)
- 16)怎么回收线程?
- 17)进程->线程->协程[——知乎阿猫](https://www.zhihu.com/question/20511233)
- 18)[线程与协程的区别](http://www.jianshu.com/p/d058a0fd4ac8)
- 19)[守护进程、僵尸进程、孤儿进程?](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/)(僵尸进程会占据PID等系统资源,可以通过kill其父进程,转交给init周期性调用wait操作清理)
- 4)程序状态字(PSW)?(一个或一组处理器寄存器,包含有进程的状态信息)
- 5)进程[创建的步骤](https://github.com/arkingc/note/blob/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.md#21-%E8%BF%9B%E7%A8%8B%E7%9A%84%E5%88%9B%E5%BB%BA%E4%B8%8E%E7%BB%88%E6%AD%A2)
- 6)进程[切换的步骤](https://github.com/arkingc/note/blob/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.md#42-%E8%BF%9B%E7%A8%8B%E5%88%87%E6%8D%A2)
- 7)一个程序从开始运行到结束的完整过程
- 8)[线程分配什么?TCB(线程控制块)?](https://github.com/arkingc/note/blob/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.md#1%E8%BF%9B%E7%A8%8B%E4%B8%8E%E7%BA%BF%E7%A8%8B)
- 9)[线程共享进程的什么?不共享什么?CPU共享吗?](https://github.com/arkingc/note/blob/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.md#1%E8%BF%9B%E7%A8%8B%E4%B8%8E%E7%BA%BF%E7%A8%8B)
- 10)怎样保证一个CPU只有一个线程运行?([CPU核数与多线程](https://blog.csdn.net/qq_33530388/article/details/62448212)
- 11)Linux线程间通信(互斥量、信号量、条件变量)
- 12)[线程有什么状态?](https://github.com/arkingc/note/blob/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.md#2%E7%BA%BF%E7%A8%8B%E7%8A%B6%E6%80%81)
- 13)线程池的了解、优点、调度处理方式和保护任务队列的方式?
- 14)Linux线程间通信的方式?(互斥量、信号量、条件变量)
- 15)怎么回收线程?
- 16)进程->线程->协程[——知乎阿猫](https://www.zhihu.com/question/20511233)
- 17)[线程与协程的区别](http://www.jianshu.com/p/d058a0fd4ac8)
- 18)[守护进程、僵尸进程、孤儿进程?](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/)(僵尸进程会占据PID等系统资源,可以通过kill其父进程,转交给init周期性调用wait操作清理)
- 20)[进程调度方法详细介绍](https://github.com/arkingc/note/blob/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F.md#2%E8%B0%83%E5%BA%A6%E7%AE%97%E6%B3%95)
- **2.并发**
- 1)多线程同步和互斥方法,内核态下有什么方法?(互斥量、信号量、条件变量)
Expand All @@ -42,6 +41,8 @@
+ 5)[如何实现守护进程](temp/进程线程.md#1如何实现守护进程)
+ 6)[main函数启动之前](https://github.com/arkingc/note/blob/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/UNIX%E7%8E%AF%E5%A2%83%E9%AB%98%E7%BA%A7%E7%BC%96%E7%A8%8B.md#11-main%E5%87%BD%E6%95%B0)
+ 7)[exit、\_exit、\_Exit](https://github.com/arkingc/note/blob/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/UNIX%E7%8E%AF%E5%A2%83%E9%AB%98%E7%BA%A7%E7%BC%96%E7%A8%8B.md#1%E8%BF%9B%E7%A8%8B%E7%9A%84%E5%90%AF%E5%8A%A8%E4%B8%8E%E7%BB%88%E6%AD%A2)
+ 8)[线程数量的限制](temp/进程线程.md#1线程数量的限制)
+ 9)[进程数量的限制](temp/进程线程.md#2进程数量的限制)
- **2.并发**
+ 1)[Linux上分析死锁的简单方法](http://blog.jobbole.com/109743/)
+ 2)[Linux内核同步机制](http://blog.jobbole.com/91784/)
Expand Down

0 comments on commit 9c985a3

Please sign in to comment.