| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 操作系统——进程、线程、内存管理、缓冲区溢出、动 |静态链接 -> 正文阅读 |
|
[系统运维]操作系统——进程、线程、内存管理、缓冲区溢出、动 |静态链接 |
1.进程、线程1.简单说一下并发和并行的理解?并行:指多个任务可以同时运行。 2.同步、异步、阻塞、非阻塞的概念1.同步和异步关注的是消息通信机制。
2.阻塞、非阻塞关注的是程序在等待调用结果时的状态。
3.什么是进程?什么是线程?3.1.进程就是正在执行的程序实例。它由操作系统进行管理,操作系统会为每个进程分配时间来占用CPU,操作系统还会为每个进程分配特定的资源。 3.2.线程是进程的一个实体,有时也被成为轻量级线程。线程是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位。 4.进程和线程的区别
5.为什么有了进程,还要有线程呢?进程可以使多个程序并发执行,以提高资源的利用率和系统的吞吐量。但也有如下缺点:
基于以上缺点,操作系统引入了比进程粒度更小的线程,作为并发执行的基本单位,从而减少程序在并发执行时所付出的时间和空间开销,提升并发性能。 6.为什么进程切换开销比线程大?——进程和线程切换的开销
1.进程切换会慢,TLB快表失效页表的查找是一个很慢的过程,所以会用TLB快表来缓存页地址,来加速页表的查找。
2.切换CPU上下文(进程上下文切换、线程上下文切换、中断上下文切换)
3.切换内核线用户态——>内核态——>用户态 6.进程的状态切换——就绪、运行、阻塞之间的切换
7.进程间通信方式——管道、消息队列、信号量、共享内存7.1.管道1.它是半双?的,具有固定的读端和写端;若要实现双向同时通信,就要设置2个管道; 7.2.消息队列(eg.电子邮件系统,基于间接通信方式)1.它是消息的链接表,存放在内核中。一个消息队列由一个标识符ID来标识; 7.3.信号量(P:-1,请求1个资源,V:+1,释放1个资源)1.信号量是一个计数器,用于实现进程间的互斥与同步,而不是存储进程间的通信数据; 7.4.共享存储——基于数据结构、基于存储区,2种1.共享存储,指的是多个进程共享一个指定的存储区; 8.进程调度的时机1.主动放弃
2.被动放弃
9.进程的调度算法:FIFO、时间片轮转、短作业优先、优先级调度、?响应?优先10.什么时候不能进行进程调度?
2.死锁11.什么是死锁?由于系统存在一些不可剥夺的资源,而当2个或多个进程占有自身资源,并请求对方资源时,会导致每个进程都无法推进,这就是死锁。 12.产生死锁的原因?1.资源竞争(不可剥夺资源) 13.死锁产生的必要条件?1.互斥条件进程要求对所分配的资源进行排他性控制。 2.请求和保持当进程因请求资源而阻塞时,对以获得的资源保持不放。 3.资源不可剥夺进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。 4.形成环路等待发生死锁时,必然存在一个进程-资源的环形链。 14.解决死锁的基本方法?
15.怎么预防死锁?1.破坏不可剥夺条件当进程获得了部分资源,但得不到其他资源时,则释放已占有资源。 2.破坏环路等待条件给资源进行编号,每个进程按编号递增的顺序请求资源,释放则相反。 16.怎么避免死锁17.怎么解除死锁?1.资源剥夺。挂起死锁线程,并抢占它的资源,资源分配给其他死锁线程; 2.撤销进程强制撤销部分、甚至全部死锁进程并剥夺这些进程的**资源(**撤销原则,可以按进程优先级进行) 3.进程回退让一个或者多个进程回退到足以避免死锁的地步。进程回退时自愿释放资源,而不是被剥夺。(系统要保持进程的历史信息,设置还原点) 3.内存管理18.物理地址、逻辑地址、虚拟内存的概念1.物理地址:它是地址转换的最终地址,进程在运行时执行指令和访问数据都要通过物理地址从主存中存取,是内存单元真正的地址。 19.分页与分段的区别?
20.为什么可以用虚拟内存?——局部性原理、页面置换、最终假象1.基于局部性原理在程序装入时,可以将程序很快用到的部分装入内存,暂时用不到的留在外存,就可以让程序运行。
2.页面置换当程序所访问的部分不在内存时,由操作系统负责从外存调入内存。若内存空间不够,由操作系统负责将内存中暂时不用的信息换出到外存。 3.虚拟内存造成的假象在操作系统的管理下,用户看来似乎有一个比实际大的多的内存。 21.如何实现虚拟内存?(虚拟内存的管理)——分段、分页、段页式虚拟内存通过内存管理单元映射到物理内存; 1.内存分段——段选择因子(段表的索引)、段内偏移量虚拟地址通过段表与物理地址进行映射。 分段管理的缺点:
2.内存分页 (虚拟地址:页号+页内偏移量)虚拟内存通过页表与物理地址进行映射。把整个虚拟内存和物理内存切成一段段固定大小的空间,称为:页。Linux下,每页4kb。
2.页表太大,导致效率低怎么办?——多级索引(类似B+树)
3.段页式20.页面置换算法有哪些?FIFO、LRU、时钟置换算法简单时钟置换算法: 21.页面抖动1.什么是抖动?1.刚换出的页面立马又要被换入内存; 2.原因1.为进程分配的物理内存太少
2.页面置换算法有问题 22.什么是缓冲区溢出?有什么危害?缓冲区:是暂时存放输入输出数据的内存; 23.谈谈你对动态链接库、静态链接库的理解?静态链接就是在编译链接时直接将需要的执?代码拷?到调?处,优点就是在程序发布的时候就不需要依赖的库,也就是不再需要带着库?块发布,程序可以独?执?,但是体积可能会相对??些。 动态链接就是在编译的时候不直接拷?可执?代码,?是通过记录?系列符号和参数,在程序运?或加载时将这些信息传递给操作系统,操作系统负责将需要的动态库加载到内存中,然后程序在运?到指定的代码时,去共享执?内存中已经加载的动态库可执?代码,最终达到运?时连接的?的。优点是多个程序可以共享同?段代码,?不需要在磁盘上存储多个拷?,缺点是由于是运?时加载,可能会影响程序的前期执?性能 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 13:27:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |