操作系统
服务器、手机、智能家居
关注点在业务逻辑:让我们的程序与操作系统打交道,其他细节交给操作系统与设备。
进程与线程?(Process vs. Thread?)
进程和线程基础(偏理论概念)
1. 定义
进程是资源(CPU、内存等)分配的基本单位,具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
线程是进程的一个实体,是独立运行和独立调度的基本单位(CPU上真正运行的是线程)。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
2.区别
- 进程是资源分配的基本(最小)单位;线程是程序执行的基本(最小)单位。
- 进程拥有自己的资源空间,没启动一个进程,系统就会为它分配地址空间;而线程与CPU资源分配无关,多个线程共享同一进程内的资源,使用相同的地址空间。
- 一个进程可以包含若干个线程。
3. 区别带来的优劣势
- 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。
- 线程的调度与切换比进程快很多,同时创建一个线程的开销也比进程要小很多。
- 但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。
为什么这个问题是面试高频?
既然这个问题是面试当中会被经常问到的,所以我去网上找一个答案,背出来不就好了。
但是,真的背答案就可以了吗?
我们要知道面试官可能根本想听到的并不是一个书本上概念的重复,他究竟想考到什么?
- 侧重点一:面试官想要了解面试者对操作系统的理解程度,因为这是操作系统中不得不提的一个概念。如果这个概念回答不上来,意味着面试者对操作系统的学习并不深。
- 侧重点二:面试官可以对你的回答作进一步展开,通过你的回答某个侧重点方向来进一步提问你对这个问题的了解程度。(这个高频问题的价值所在)。
比如:
- 当你回答:内存结构不同。进程与进程之间不能共享内存,而线程可以。那么就深入提问,内存如何寻址?
- 当你回答:线程之间通信很方便,进程与进程通信不方便。那么问题就又来了,你给我说一下进程之间怎么通信?进程之间通信方法有哪些?不同通信方法有哪些优劣点?
如何用自己的理解向面试官展示一个满意的答案?
进程:(是一个容器)
-
进程与进程之间相对独立
-
进程包括几个或者上百个线程在跑
-
内存(逻辑内存)包括在进程里面,每个进程的内存都是互相独立的
-
进程共有文件/网络句柄(handle),打开同一个文件,抢同一个网端端口
线程:(真正运行的一个一个地线程)
-
调用栈(堆栈):主线程的入门main函数,进行函数调用,参数和返回地址、局部变量等压入栈内
-
PC(Program Couner),地址,PC的指针指向代码所在的内存。
缓冲区溢出:检测用户名长度不要超过存储程序那部分
-
TLS(Thread local storage):分配内存,存放变量
展开内容:
- 怎么交互:进程可以通过TCP/IP端口交互,而线程会共享内存,指针指向同一个内容,交互很容易。
- 进程开销很大,进程只需要分配栈,分配一个PC就好。
推荐先看一下阮一峰的一篇博客:进程与线程的一个简单解释,用图解释十分生动形象。
存储与寻址
存储
硬盘(容量大)-->内存(快速随机访问)--> 缓存 --> 寄存器
寻址
寻址空间:指针能寻找到的地址
- 32位 --> 4G
- 64位 --> ~10^18 Bytes
- 64位JVM --> 可使用更大内存,需重新编译
// 寻址
int n = *p; // --> MOV EAX, [EBX]
过程解释:
分页
进程管理、内存管理和文件管理是操作系统的三大核心功能。
-
内存是操作系统里面的另一个核心概念。它是进程的存放场所。如何对内存进行管理,使得数据的读写具有高效率、高安全、高空间利用率和位置透明的特性是内存管理所要达到的目的。
-
文件是操作系统提供的外部存储设备的抽象,它是程序和数据的最终存放地点。如何让用户的数据存放变得容易、方便、可靠和安全是文件系统要解决的问题。
网友评论