1、什么是程序,什么是进程?
1. 程序是保存在磁盘上的可执行文件。
2. 运行程序时,需要将可执行文件加载到内存,形成进程。
2、什么是内存分配,什么是内存映射?
1.所谓内存分配与释放,其本质就是建立或取消虚拟内存和物理内存间的映射关系。
2.将文件/设备空间映射到共享内存区
3、进程间通信的方式有哪些,并写出主要的操作函数。
?1) 简单进程间通信:
命令行参数、环境变量、信号、文件。
?2) 传统进程间通信:
管道(fifo/pipe)。
?3) XSI进程间通信:
共享内存、消息队列、信号量。
?4) 网络进程间通信:
套接字。
4、线程与进程的异同?
1.进程:拥有4G独立的虚拟内存 复制数据空间 共享代码区
2.线程:拥有独立的栈区 同一个进程中的线程共享代码区、数据区、堆区 轻量级的
线程与进程的区别?
进程:重量级的 一个进程里至少有一个线程 一个进程可以有多个线程
线程共享进程的资源(线程只拥有自己独立的栈内存)
线程只是进程的一个执行线程
5、写出IOS/SIO七层模式和TCP/IP网络的四层模型,路由器和TCP协议属于哪一层?
1.应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
2.应用层,传输层,互联网层,网络接口层
3.路由属于互联网层
4.TCP属于传输层
6、TCP与UDP的区别?
1.TCP:数据传输控制协议 数据流 连接 可靠 数据完整且有序 比UDP要低
2.UDP:用户数据报协议 数据报 不连接 不可靠 不保证数据的完整和有序 传输效率要高
7、fork()和vfork()的区别。
1.pid_t fork() 创建一个子进程
父进程返回的是子进程的进程id
子进程返回的是0
2.pid_t vfork()
与vfork不同之处在于:vfork的子进程并不会拷贝父进程的数据区、堆栈区 创建进程的效率比较高
子进程基本上可以用exec系列函数直接取代该进程
vfork保证先让子进程执行
exit 才能正确的退出子进程
8、进程的内存空间从小到大包括哪些区,这些区分别存储什么数据?
1.代码区->数据段->BSS段->堆区->堆栈缓冲区(共享库、共享内存)->栈区->命令行参数 环境表->内核区
?代码区(text):
可执行指令、字面值常量、具有常属性的全局和静态局部变量。只读。
?数据区(data):
初始化的全局和静态局部变量。
?BSS区:
未初始化的全局和静态局部变量。
进程一经加载此区即被清0。
数据区和BSS区有时被合称为全局区或静态区。
?堆区(heap):
动态内存分配。从低地址向高地址扩展。
?栈区(stack):
非静态局部变量,
包括函数的参数和返回值。
从高地址向低地址扩展。
堆区和栈区之间存在一块间隙,一方面为堆和栈的增长预留空间,同时共享库、共享内存等亦位于此。
?命令行参数与环境区:
命令行参数和环境变量。
9、什么是可靠信息,什么是不可靠信号? 信号有什么作用?
1.可靠
?1) 位于[SIGRTMIN(34),SIGRTMAX(64)]区间的信号都是可靠信号。
?2) 支持排队,不会丢失。
?3) 无论可靠信号还是不可靠信号,都可以通过sigqueue/sigaction函数发送/安装,以获得比其早期版本kill/signal函数更可靠的使用效果。
2.不可靠
?1) 那些建立在早期机制上的信号被称为“不可靠信号”,小于SIGRTMIN(34)的信 号都是不可靠信号。
?2) 不支持排队,可能会丢失。同一个信号产生多次,进程可能只收到一次该信号
?3) 进程每次处理完这些信号后,对相应信号的响应被自动恢复为默认动作,除非 显示地通过signal函数重新设置一次信号处理程序。
10、动态库与静态库的区别?
1.本质
使用静态库 静态库中的代码指令复制一份到可执行程序中 程序在执行时不再依赖于静态库
使用动态库 在可执行程序中嵌入了动态库中的相对地址 程序在执行时跳到动态库相对位置执行代码
2.静态库 生成的最终可执行程序 比较大 运行相对较快 编译过程较慢
动态库 生成的最终可执行程序 比较小 运行相对较慢 编译过程较快
11、线程同步的机制有哪些?分别有啥特点?
1.当多个线程同时访问其所共享的进程资源时,需要相互协调,以防止出现数据不一致、不完整的问题。这就叫线程同步。
12.请简述TCP三次握手和四次分手的过程,并阐述这样做的作用。
1.确定双方是否接收和发送信息的完整性
2.确定两边的接收和发送都已经完成
13.可以从哪些方面想办法提高服务器的并发性?
1.并发性 一个系统最大的进程数 远远小于 线程的最大数量
14.死锁的情况有哪些?如何避免死锁?
1. 互斥锁死锁情况:
1.不同线程申请普通锁,将按照顺序依次申请锁并加锁 没有解锁
2.一个线程对一个普通锁两次加锁将导致死锁
3.按不同顺序访问互斥锁导致死锁 线程1 A,B 线程2 B,A
15、进程?
1.进程间通信(Interprocess Communication, IPC),是指两个或多个进程之间进行数据交换的过程
3. 一个程序(文件)可以同时存在多个进程(内存)。
4. 进程在内存空间中的布局就是进程映像,
16、虚拟内存
1. 每个进程都有各自互独立的4G字节虚拟地址空间。
2. 用户程序中使用的都是虚拟地址空间中的地址,永远无法直接访问实际物理内存地址。
3. 虚拟内存到物理内存的映射由操作系统动态维护。
4. 虚拟内存一方面保护了操作系统的安全,另一方面允许应用程序,使用比实际物理内存更大的地址空间。
17、线程?
一、基本概念
1、线程就是程序的执行路线,即进程内部的控制序列,或者说是进程的子任务。
2、线程,轻量级,不拥有自己独立的内存资源,共享进程的代码区、数据区、堆区(注意没有栈区)、环境变量和命令行参数、文件描述符、信号处理函数、当前目录、用户ID和组ID等资源。
3、线程拥有自己独立的栈,因此也有自己独立的局部变量。
4、一个进程可以同时拥有多个线程,即同时被系统调度的多条执行路线,但至少要有一个主线程。
二、基本特点
1、线程是进程的一个实体,可作为系统独立调度和分派的基本单位。
2、线程有不同的状态,系统提供了多种线程控制原语,如创建线程、销毁线程等等。
3、线程不拥有自己的资源,只拥有从属于进程的全部资源,所有的资源分配都是面向进程的。
4、一个进程中可以有多个线程并发地运行。它们可以执行相同的代码,也可以执行不同的代码。
5、同一个进程的多个线程都在同一个地址空间内活动,因此相对于进程,线程的系统开销小,任务切换快。
6、线程间的数据交换不需要依赖于类似IPC的特殊通信机制,简单而高效。
7、每个线程拥有自己独立的线程ID、寄存器信息、函数栈、错误码和信号掩码。
8、线程之间存在优先级的差异。
三、POSIX线程(pthread)
1、早期厂商各自提供私有的线程库版本,接口和实现的差异非常大,不易于移植。
2、IEEE POSIX 1003.1c (1995)标准,定义了统一的线程编程接口,遵循该标准的线程实现被统称为POSIX线程,即pthread。
3、pthread包含一个头文件pthread.h,和一个接口库libpthread.so。
4、功能
线程管理:创建/销毁线程、分离/联合线程、设置/查询线程属性。
线程同步
A. 互斥量:创建/销毁互斥量、加锁/解锁互斥量、设置/查询互斥量属性。
B. 条件变量:创建/销毁条件变量、等待/触发条件变量、设置/查询条件变量属性。