现代操作系统——进程、线程、协程

进程、线程、协程的区别与联系

进程是操作系统资源分配和拥有的基本单位,可以同时开启多个进程来执行不同的任务,不同进程切换实现并发,使得用户感受到多任务并行,进程拥有着CPU环境如:栈、寄存器、页表、文件句柄等资源,进程间的通信需要借助操作系统,不同进程间切换开销很大,需要切换虚拟地址空间,切换内核栈和硬件上下文、页表切换等
线程是程序执行的基本单位用于进程间的多任务并发执行。同一进程的不同线程共享着该进程的各种资源,只需要保存和设置程序计数器、少量寄存器和栈的内容,因此切换时开销比较小,线程间的通信可以直接读写进程数据段(全局变量)来进行通信
协程为用户用户轻量级的线程,用于线程内部调度,同一时间只能执行一个协程,而其他协程处于休眠状态,实现的方法是先将寄存器上下文和栈保护,等切换回来再进行恢复,没有进入内核,所以上下文切换非常的快。

多线程编程的注意的点

语句的原子性
线程之间有无先后访问顺序(线程依赖关系)
多个线程共享访问同一变量(同步互斥问题)

进程调度算法

1.先来先服务
2.时间片轮转法
3.优先级调度
4.短作业优先
5.最短剩余时间优先
6.多级反馈调度

进程间的通信

1.管道
2.共享内存
3.信号量
4.信号
5.消息队列
6.套接字

快表是什么

快表是类似于缓存的思想,将 常用的地址单独的记录在一张表上,当cpu访问一个逻辑地址时,首先访问快表中是否存在该地址,若命中,则直接返回物理地址,若未命中,则需要到内存中的页表找到对应的项。

动态分配分区算法有哪些

1.首次适应算法
第一个满足分区大小就分配
2.最佳适应算法
空闲分区按照升序排序,第一个能满足的空闲区分配。因此为了保证当“大进程”到来时能有连续的大片空间,可以尽可能多地留下大片的空闲区,即,优先使用更小的空闲区。3.最坏适应算法
空闲分区按照降序排序,避免过多难以利用的小碎片
4.临近适应算法
用循环链表,每次都从上一次搜索结束的地方往下寻找,避免低地址区有过多碎片,每次从头找都会浪费很多的时间

逻辑地址如何转为物理地址

首先根据逻辑地址计算出页号和偏移量,判断页号是否越界,查询页表找到对应的页号,在到对应的页根据偏移量里找到对应的物理地址,最后可以访问内存空间。

进程同步有哪些方法

1.信号量
2.临界区
3.互斥锁

虚拟内存是什么

虚拟内存是将物理内存扩充成更大的逻辑内存,使得进程有更多的可用内存。为了更好的管理内存,操作系统把内存抽象成地址空间,每个地址空间被分成多个块,这个块称为页面。页面和物理地址空间存在映射,但不必要连续,也不需要所有页都在物理内存中,当程序使用到不在物理内存的页时,由硬件来执行必要的映射,将缺失部分重新装入物理内存,并重新执行指令。

由哪些 锁

1.读写锁
可用多个读,一个写
2.互斥锁
只能一个进程独占
3.自旋锁
不断访问直到能用
4.条件变量

回收线程的方法

1.等待父线程等待子线程结束
pthread_join
2.分离线程
pthread_detach
3.直接结束线程
pthread_exit()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值