转载自:https://blog.csdn.net/Xiao_peng117/article/details/76651444
- 1 大致描述一个进程在内存中的分布情况
1)代码区:储存程序代码
2)data段:已初始化的全局变量和static变量以及常量字符串。程序结束后自动释放
3)bss段:未初始化的全局变量和static变量
4)栈区:局部变量
5)堆区:程序中动态分配的内存
代码区
data段
bss段
堆区
栈区
1.2 heap和stack的区别
heap(堆区)stack(栈区) 并不是数据结构中的堆和栈
堆区空间需要自己开辟自己释放,栈区由系统自动分配和释放
- 如何查看一个正在运行的程序的内存分布
终端输入命令cat /proc/[pid]/maps
maps文件保存的就是进程内存分布情况。
- 如何在一个程序里创建一个新进程
fork():子进程和父进程运行顺序无法确定
vfork():父进程会阻塞,等待子进程调用exec或exit之后,父进程才会运行。若子进程的运行需求于父进程的下一动作,则会导致死锁。
- 进程间哪些资源是共享的,哪些是独有的
fork()后的父子进程会共享正文段和文件共享,不共享数据段和堆栈空间。
- 进程间有哪些通信机制(IPC)
1)管道:
(1) 只能用于公共祖先的两个进程
(2) pipe()创建匿名管道;mkfifo创建有名管道FIFO.
2)消息队列
(1)ftok -> key_t 获取key值
(2)msgget -> mgid 得到一个实例消息队列
(3)msgrcv/msgsen 接收发送数据
(4)msgctl 销毁
3)共享内存
(1)shmget 获取实例(key,大小,要求)
(2)shmat 映射地址
(3)shmdt 解除映射
(4)shmctl 移除
4)信号量:是一个计数器,为多个进程提供对共享数据对象的访问,常作为锁,防止多个进程同时访问一个资源
5)信号量数组
(1)ftok 获取key值
(2)semget 得到实例(key,信号量个数,要求)
(3)semop 操作
(4)semctl 放置信号灯/销毁
6.按下ctrl+c会导致进程结束,为什么?
给前台进程发送信号:SIGINT信号,(2)号信号
7.如果在bash里输入./a.out回车之后发生了哪些事情
bash调用fork()创建一个子进程,在子进程中执行a.out,并等待子进程结束
(1) bash调用fork()
(2) sys_execve进行参数的检查复制
(3) do_execve检查文件是否存在
(4) prepare_binprm进行文件格式判断
(5) search_binary_handler根据文件格式搜索装载程序
(6) load_elf_binary装载程序开始执行可执行文件
8.如何在一个程序里创建一个新线程
pthread_creat()
由于pthread库不是linux默认库,所以编译时要加-lpthread
9.线程间哪些资源是共享的?哪些是独有的?
线程共享gid,uid,文件描述符,堆空间。
线程有独立的栈,局部变量,寄存器,程序计数器,线程ID。
10.线程同步有哪些机制?
互斥量:引入锁,得到锁的执行操作,未得到锁的等待,不能共享数据。
条件变量:触发条件才会执行,等待条件挂起线程直到其他线程触发条件
信号量
11.描述网络协议的分层概念,以及常用TCP/IP协议族的大致框架结构
osi七层结构
TCP/IP四层
应用层
应用层(http/ftp)
表示层
传输层(udp,tcp)
会话层
网络层(ip)
网络层
数据链路层
传输层
(物理层)
数据链路层
物理层
12.简述TCP/IP协议簇中的TTL,SEQ,SYN,ACK,FIN,MTU是什么?
TTL:网络数据包的生存周期
SEQ:
SYN:表示建立连接(TCP格式段的标志位)
ACK:表示响应 (TCP格式段的标志位)
FIN:关闭连接(TCP格式段的标志位)
MTU:传输数据包的最大字节数
13.描述三次握手,四次挥手,为什么要握手三次呢?
1)
客户端向服务器端发送SYN包,请求连接;
服务器端向客户端发送SYN+ACK,为连接分配资源;
客户端为连接分配资源,并回复ACK。
2)
客户端向服务器端发送FIN报文,请求断开连接;
服务器端回复ACK,并进入wait状态;
服务器端确认数据传输完毕,发送FIN报文
客户端收到回复ACK,断开连接。
3)
为了防止因为延迟,使服务器端再进入等待连接状态而浪费资源。
14.常用socket通信大致需要哪几个步骤
1)UDP
主动段 被动端
socket() socket()
sendto() bind()
close() recvfrom();
close();
2)TCP
主动段 被动段
socket() socket()
bind()//可省略 bind()
connect() listen()//监听请求连接
accept()//接受请求
send()/write() recv()/read()
close close()
15.什么情况下适合用UDP,什么情况下适合用TCP
1)UDP
提供高效率服务;如音频和多媒体应用
2)TCP
提供稳定的服务;需要可靠稳定的连接时,如远程登陆,文件传输
16.在后台静默的ping某个ip地址,命令行该如何输入
ping xxx.xxx.x.xxx
17.c语言源代码变成a,out经历哪些过程
C语言编译大致过程:预处理 -->编译 -->汇编 --> 可执行文件
具体过程:预处理 -->编译优化 -->汇编 -->链接过程 --> 可执行文件
格式变化:.c -->.i -->.s -->.o -->可执行文件
19.udp如何确认被动端已收到数据
被动端用recvfrom来接收数据,如果成功接收数据,返回接收到的字节数,若失败则返回-1.
20.线程和进程的区别
1.进程是程序的执行过程,线程是进程的一个执行路径
2.在系统中,进程是系统资源分配的单位,线程是CPU调度的单位
3.进程之间不共享资源,线程会共享所属进程的地址空间和其他资源
4.进程切换开销大,线程较小
21.线程和进程的应用场景
1.当需要频繁销毁核创建时就用线程
2.单应用多任务时