操作系统学习笔记01

操作系统

01-16

操作系统01-16

01 线程、进程、协程的区别和联系

02 线程与进程比较

03 线程与进程的区别

04 外中断和异常的区别

05 进程线程模型

06 进程调度算法

07 Linux下进程通信方式,线程通信方式(Linux和Window)

08 Linux下同步机制

09 如果系统中具有快表之后,地址转换变成什么样子

10 内存交换和覆盖有什么区别

11 动态分区分配算法有哪几种?

12 虚拟技术13 进程状态切换

14 一个c/c++程序从编译到生成可执行文件的完整过程

15 进程同步的四种方法

16 操作系统在对内存进行管理的时候需要做什么?

01 线程、进程、协程的区别和联系

进程:是资源分配的基本单位,运行一个可执行程序会创建一个或者多个进程,进程就是运行起来的可执行程序。开销大(切换内核栈和硬件上下文,cpu缓存)

线程:是资源调度的基本单位,是程序执行的基本单位,是轻量级的进程。每个进程中都有唯一的主线程,主线程和进程相互依存。开销很小(切换时只需要保存和设置少量寄存器)

协程:用户态的轻量级线程,线程内部调度的基本单位。(直接操作栈,基本没有开销)

注:用户态和内核态可以理解为user和root

02 线程与进程比较

1.线程启动速度快、轻量级、系统开销小

2.但使用时需要注意数据一致性问题,

3.同一线程共享的有堆、全局变量、静态变量、指针、引用、文件等,独自占有栈

03 线程与进程的区别

1.调度:线程是调度的基本单位(PC、状态码、寄存器);进程是拥有资源的基本单位(打开文件、堆、代码等)

2.并发:一个进程内多个线程可以并发;多个进程可以并发

3.拥有资源:线程不拥有资源,但线程可以共享所属进程的资源;进程是拥有资源的独立单位

4.系统开销:线程创建销毁只需要处理PC值、状态码、通用寄存器值、线程栈以及栈指针即可;进程则需要重新分配及销毁task_struct结构。


pc值指的是当前正在执行指令的下一条指令的地址

状态码,也称为HTTP状态码或HTTP响应码,是用于标识网页服务器HTTP/HTTPS响应状态的3位数字代码。

通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。除此之外,它们还各自具有一些特殊功能。

线程栈**是指某时刻时内存中线程调度的栈信息,当前调用的方法总是位于栈顶。线程栈的内容是随着程序的运行动态变化的,因此研究线程栈必须选择一个运行的时刻(实际上指代码运行到什么地方)。

栈指针是一个特殊的寄存器,用于指示当前栈顶的地址。在嵌入式系统中,栈指针通常由硬件提供支持,如ARM架构中的SP寄存器。


04 外中断和异常的区别

外中断:有CPU执行指令以外的事件引起,如I/O完成中断,表示设备输入/输出处理完成,处理器可以发送下一个请求。其他的还有:时钟中断、控制台中断等。

异常:CPU执行指令的内部事件引起,如非法操作码、地址越界、算术溢出(超出寄存器或者存储器的能力限制)

05 进程线程模型

多线程用户模型(用户态):同一进程中有多个线程,所有线程共享进程的内存空间,进程的所有全局变量都会被线程共享,但线程被CPU调用顺序不可控,所以需要注意对临界资源的访问。虽然线程有安全隐患,但是好处也是很多。例如原先顺序执行的程序会被拆分成几个独立的逻辑流,这些逻辑流可以独立完成相关任务。线程中非常重要的两点是:线程依赖关系、同步互斥问题。线程有自己独立的栈空间(非共享)。

多进程模型:进程由代码段、堆栈段、数据段组成,代码段是二进制代码,多个程序可以共享。父子进程除了pid之外,其他的几乎全部一致。但是对数据进行读写时,子进程会重新拷贝数据进行操作。子进程也可以通过调用execv()重新加载代码段,使得和父进程分开(在shell中执行程序就是通过fork()一个子进程在通过execv()重新加载代码段)。

进程有两种创建方式:1. 操作系统创建 2. 父进程创建。计算机启动到终端执行过程:0号进程->1号内核进程->1号用户态进程->getty进程->命令执行进程

06 进程调度算法

1.先来先服务 first-come first-serverd(FCFS):顺序进行

2.短作业优先 shortest job first(SJF):按运行时间进行排序,短时优先

3.最短剩余时间优先 shortest remaining time next(SRTN):按剩余运行时间排序调度

4.时间片轮转:按照FCFS原则排列成队列,每次调度给队首分一个时间片,执行完这个时间片之后,将该进程送至队末尾。(效率和时间片大小有关,如果太小会导致进程切换过于频繁)

5.优先级调度:为进程分配优先级,按优先级调度

6.多级反馈队列:划分多个队列,当进程在第一个队列花费完时间片但未结束时,会被移到下一个队列继续执行时间片。

07 Linux下进程通信方式,线程通信方式(Linux和Window)

进程:

管道:

无名管道(内存文件):管道是半双工的通信方式,数据只能单向流动,且只能在具有亲缘关系(父子进程)的进程之间使用。

有名管道(FIFO,借助文件系统):管道是半双工的通信方式,允许在不具有亲缘关系(父子进程)的进程之间使用。

共享内存:映射一段可以被其他进程共同访问的内存,由一个进程创建。共享内存最快的是IPC方式,针对进程间运行效率低而专门设计,与信号量配合使用。

消息队列:有消息的链表,存放在内核中并由消息队列标识符标识。克服了信号传递信息少、管道智能承载无格式字节流及缓冲区大小受限等缺点

Socket:通用的进程间通信机制,用于不同机器间进程通信

套接字:不同机器之间进程通信的方式

信号:用于通知接受进程某个事件已经发生,例如按下键盘

信号量:计数器,控制多个进程对共享资源的访问(锁机制)。

线程:

Linux:信号,锁机制(互斥、读写锁),条件变量(使用通知的方式解锁),信号量

Window:全局变量,Message消息机制(PostMessage---线程向主窗口发送消息;PostThreadMessage---任意线程之间通信),CEvent对象(对CEvent的触发状态实现线程直接同步)

08 Linux下同步机制

POSIX信号量:可用于进程同步,也可用于线程同步

POSIX互斥锁+条件变量:只能用于线程同步

09 如果系统中具有快表之后,地址转换变成什么样子

注:快表是一种特殊的高速缓冲存储器(Cache),内容是页表中的一部分或全部内容。 [1]

在操作系统中引入快表是为了加快地址映射速度。

在虚拟页式存储管理中设置了快表,作为当前进程页表的Cache。通常快表处于MMU中。

快表节省90%的时间。

1.CPU给出逻辑地址,由某硬件算的页号、页内偏移量等,再将页号与快表中的所有页号进行比较。

2.若找到匹配页号,则直接取出该页对应的内存块号并与页内偏移量拼接成物理地址,最后访问器对应的内存单元。

3.如果没有找到,则访问内存中的页表,在找到对应的页表项,再进行拼接,进行访问对应的内存单元。

10 内存交换和覆盖有什么区别

交换主要在不同进程之间进行,但是覆盖则用于同一进程(程序)中。

11 动态分区分配算法有哪几种?

  1. 首次适应算法:每次都从低地址开始查找,找到第一个满足大小的空闲分区。(优点:开销最小,性能最好; 缺点:在堆区则容易产生内存碎片)

  1. 最佳适应算法:动态分配是一种连续分配方式,且要求分配空间为连续的区域。因此为了保证大的进程能运行,优先分配更小的空闲区实现:分区按照容量递增次序链接,按顺序查找,找到满足大小的第一个空闲分区。(缺点:大量碎片)

  2. 最大适应算法:每次分配时优先使用最大的连续空闲区,避免留下太多小碎片。实现:分区按照容量递减次序链接,按顺序查找,找到满足大小的第一个空闲分区。(缺点:没有大的空间)

  3. 邻近适应算法:首次适应算法每次从头开始找,容易导致出现小碎片,且花销过大。如果从上次结束的位置开始寻找则可以避免上述问题。实现:分区按照地址递增的顺序排列,每次都上次查找结束的位置开始找,找到满足大小的第一个分区。(缺点:导致内存末尾分配空间会分裂成小的碎片)

12 虚拟技术

概念:把一个物理实体转化为多个逻辑实体(时分复用技术、空分复用技术)。

多进程与多线程:上文的时间片就是时分复用技术的体现。

虚拟内存:空分复用技术,将物理内存抽象为地址空间,每个进程都有各自的地址空间,这个地址空间被分割成许多块,每一块称为一页。目的是让程序获得更多的可用内存,允许程序调入部分到内存即可运行,大大提升了有限内存运行大程序的可能性。

13 进程状态切换

  • 就绪状态:等待被调度

  • 运行状态

  • 阻塞状态:等待资源

    注:运行态和就绪态可以互相转化,其他的只能单向转换。阻塞状态是缺少需要的资源(不包括CPU时间)从而由运行态转化而来。

14 一个c/c++程序从编译到生成可执行文件的完整过程

  1. 预编译(#开头的指令,展开宏定义,处理条件预编译指令,删除注释,保留#pragma编译指令,添加行号表示便于输出,替换#include编译指令为其中的文件内容)

  2. 编译(把预编译之后生成的xxxx.i(xxxx.ii)文件进行一系列词法分析、语法分析、语义分析及优化之后生成相应的汇编代码文件)

  3. 汇编:将汇编代码转化为机器可以执行的指令。经汇编之后产生模板文件xxx.o(linux)或者xxx.obj(window)

  4. 链接:将产生的目标文件进行链接,形成可执行程序。静态链接:把所有程序模块都链接成一个单独的可执行文件,使用静态库,难以更新但是运行速度快。动态链接:按照模块拆分成独立部分,运行时在将其链接。更新方便

15 进程同步的四种方法

  1. 临界区:对临界资源访问的那段代码称为临界区,在进入之前需进行检查。

  2. 同步与互斥:同步(多个进程因为合作产生的直接制约关系,使得进程有一定的先后执行关系)互斥(多个进程在同一时刻只能有一个进程进入临界区)

  3. 信号量

  4. 管程

16 操作系统在对内存进行管理的时候需要做什么?

  • 内存空间的分配与回收

  • 从逻辑上对内存空间进行扩充

  • 提供地址转换功能,负责程序的逻辑地址与物理地址的转换

  • 提供内存保护功能,确保进程间互不干扰

  • 16
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值