2019年6月25日 局域网相关知识,队列

局域网与数据结构详解
本文深入解析局域网的三层体系结构,包括物理层、媒体访问控制MAC子层和逻辑链路控制LLC子层的功能。同时,详细阐述顺序存储结构的循环队列原理,包括队列操作、队列长度计算及队空队满的判断方法。并讨论了操作系统内存管理中的内存碎片问题,包括内零头和外零头的概念。

1

局域网体系结构分为3层:
1.物理层:处理比特流,处理物理连接,处理机械、电气、功能和规程的特性。
2.媒体访问控制MAC子层:负责介质访问控制机制的实现。
3.逻辑链路控制LLC子层:负责屏蔽掉MAC子层的不同实现,将其变成统一的LLC界面。
数据链路层:LLC子层和MAC子层

**

2

**
顺序存储结构的循环队列
假设循环队列的队尾指针是rear,队头是front,其中QueueSize为循环队列的最大长度。

(1) 入队时队尾指针前进1:(rear+1)%QueueSize

(2) 出队时队头指针前进1:(front+1)%QueueSize

例1, 例2

(3) 队列长度:(rear-front+QueueSize)%QueueSize

例3:

现有一循环队列,其队头指针为front,队尾指针为rear;循环队列长度为N。其队内有效长度为?(假设队头不存放数据)

答案:(rear-front+N)%N
(4) 队空和队满的条件

为了区分队空还是堆满的情况,有多种处理方式:

方式1: 牺牲一个单元来区分队空和队满,入队时少用一个队列单元,即约定以"队头指针在队尾指针的下一位置作为队满的标志"。

队满条件为:(rear+1)%QueueSize==front

队空条件为:front==rear

队列长度为:(rear-front+QueueSize)%QueueSize

方式2: 增设表示队列元素个数的数据成员size,此时,队空和队满时都有front==rear。

队满条件为:size==QueueSize

队空条件为:size==0

方式3: 增设tag数据成员以区分队满还是队空

tag表示0的情况下,若因删除导致front==rear,则队空;

tag等于1的情况,若因插入导致front==rear则队满

例1:

循环队列的存储空间为Q(1:50),初始状态为front=rear=50。
经过一系列正常的入队与退队操作后,front=rear=25。此后又插入一个元素,则循环队列中的元素个数为多少?

答案:1,或50且产生上溢错误
例2:

循环队列的存储空间为Q(1:40),初始状态为front=rear=40。
经过一系列正常的入队与退队操作后,front=rear=15,此后又退出一个元素,则循环队列中的元素个数为多少?

答案:39,或0且产生下溢错误
例3:

设循环队列的存储空间为Q(1:35),初始状态为front=rear=35。现经过一系列入队与退队运算后,front=15,rear=15,则循环队列中的元素个数为多少?

答案:0或35
例4:

循环队列的存储空间为Q(1:200),初始状态为front=rear=200。经过一系列正常的入队与退队操作后,front=rear=1 则循环队列中的元素个数为多少?

答案:0或200
例3:个人觉得这一题条件不全

最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是:rear=front

3

按序分配可以破坏环路等待的条件、一次性给进程分配完全部资源破坏请求与等待条件 剩下那两个条件直接按名字 反着操作就可以。
避免死锁就是银行家算法+安全性算法

4:系统抖动

在请求分页存储管理中,从主存(DRAM)中刚刚换出(Swap Out)某一页面后(换出到Disk),根据请求马上又换入(Swap In)该页,这种反复换出换入的现象,称为系统颠簸,也叫系统抖动。
危害:系统时间消耗在低速的I/O上,大大降低系统效率。进程对当前换出页的每一次访问,与对RAM中页的访问相比,要慢几个数量级。
原因:调度算法不科学,交换算法不科学

解决:好的页替换算法减少运行的进程数

5

操作系统在分配内存时,有时候会产生一些空闲但是无法被正常使用的内存区域,这些就是内存碎片,或者称为内存零头,这些内存零头一共分为两类:内零头和外零头。
内零头是指进程在向操作系统请求内存分配时,系统满足了进程所需要的内存需求后,还额外还多分了一些内存给该进程,也就是说额外多出来的这部分内存归该进程所有,其他进程是无法访问的。
外零头是指内存中存在着一些空闲的内存区域,这些内存区域虽然不归任何进程所有,但是因为内存区域太小,无法满足其他进程所申请的内存大小而形成的内存零头。
页式存储管理是以页为单位(页面的大小由系统确定,且大小是固定的)向进程分配内存的,例如:假设内存总共有100K,分为10页,每页大小为10K。现在进程A提出申请56K内存,因为页式存储管理是以页为单位进程内存分配的,所以系统会向进程A提供6个页面,也就是60K的内存空间,那么在最后一页中进程只使用了6K,从而多出了4K的内存碎片,但是这4K的内存碎片系统已经分配给进程A了,其他进程是无法再访问这些内存区域的,这种内存碎片就是内零头。
段式存储管理是段(段的大小是程序逻辑确定,且大小不是固定的)为单位向进程进行内存分配的,进程申请多少内存,系统就给进程分配多少内存,这样就不会产生内零头,但是段式分配会产生外零头。
例如:假设内存总的大小为100K,现在进程A向系统申请60K的内存,系统在满足了进程A的内存申请要求后,还剩下40K的空闲内存区域;这时如果进程B向系统申请50K的内存区域,而系统只剩下了40K的内存区域,虽然这40K的内存区域不归任何进程所有,但是因为大小无法满足进程B的要求,所以也无法分配给进程B,这样就产生了外零头。请求段式存储管理是在段式存储管理的基础上增加了请求调段功能和段置换功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值