【C++】作业【七】笔试 cat|死锁|网络字节序|数组与指针区别|IP数据包与地址|多线程进程应用区别|linux内核函数|驱动并发互斥

1.下面哪个命令可以查看file1文件的第300-500行的内容?

head -n k          # 打印前k行
head -n -k         # 打印除最后k行外的所有内容
tail -n k          # 打印最后k行
tail -n +k         # 从k行开始打印
直接通过sed -n命令获取指定范围的内容,其中p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行。

B、C可以,A没打印第500行,从300行开始打印打印200行包括第300行

 

2.下面那些是死锁的必要条件?

A.互斥     B.请求保持     C.不可剥夺     D.环

ABCD

所谓死锁,是指多个进程循环等待它方占有的资源而无限期地僵持下去的局面。

产生死锁的必要条件

从以上分析可见,如果在计算机系统中同时具备下面四个必要条件时,那麽会发生死锁。换句话说,只要下面四个条件有一个不具备,系统就不会出现死锁。

〈1〉互斥条件。即某个资源在一段时间内只能由一个进程占有,不能同时被两个或两个以上的进程占有。这种独占资源如CD-ROM驱动器,打印机等等,必须在占有该资源的进程主动释放它之后,其它进程才能占有该资源。这是由资源本身的属性所决定的。如独木桥就是一种独占资源,两方的人不能同时过桥。

〈2〉不可抢占条件。进程所获得的资源在未使用完毕之前,资源申请者不能强行地从资源占有者手中夺取资源,而只能由该资源的占有者进程自行释放。如过独木桥的人不能强迫对方后退,也不能非法地将对方推下桥,必须是桥上的人自己过桥后空出桥面(即主动释放占有资源),对方的人才能过桥。

〈3〉占有且申请条件。进程至少已经占有一个资源,但又申请新的资源;由于该资源已被另外进程占有,此时该进程阻塞;但是,它在等待新资源之时,仍继续占用已占有的资源。还以过独木桥为例,甲乙两人在桥上相遇。甲走过一段桥面(即占有了一些资源),还需要走其余的桥面(申请新的资源),但那部分桥面被乙占有(乙走过一段桥面)。甲过不去,前进不能,又不后退;乙也处于同样的状况。

〈4〉循环等待条件。存在一个进程等待序列{P1,P2,...,Pn},其中P1等待P2所占有的某一资源,P2等待P3所占有的某一源,......,而Pn等待P1所占有的的某一资源,形成一个进程循环等待环。就像前面的过独木桥问题,甲等待乙占有的桥面,而乙又等待甲占有的桥面,从而彼此循环等待。

 

3.IP数据报头采用()字节序,在此字节序下从低地址到高地址0x1234的表示形式为 () 。

 

  • big_endian,0x12 0x34 0 0
  • little_endian,0x34 0x12 0 0
  • big_endian,0 0 0x12 0x34
  • little_endian, 0 0 0x34 0x12

C

其实 big endian 是指低地址存放最高有效字节( MSB ),而 little endian 则是低地址存放最低有效字节( LSB )。 所有网络协议也都是采用 big endian 的方式来传输数据的。所以有时我们也会把 big endian 方式称之为网络字节序。当两台采用不同字节序的主机通信时,在发送数据之前都必须经过字节序的转换成为网络字节序后再进行传输。

记忆方式:因为端模式,阅读起来和多数人阅读习惯一致;,而端模式,阅读起来和部分人的阅读习惯一致(这小部分人一定是奇葩。。)

0x1234其实是0x00001234,每2个16进制数字占一个字节,IP地址是4字节,所以看到的分组就是12一组,34一组,因为一个字节一个字节

4.数组与指针的区别?

概念:数组是用于储存多个相同类型数据的集合。指针相当于一个变量,但它存放的是其它变量在内存中的地址。

数组在定义之初就有自己的内存,但定义指针时如果未指向某一块内存是,它是没有自己的内存的。

赋值:同类型指针变量可以相互赋值,数组不行,只能一个一个元素的赋值或拷贝

数组名是指向数组首地址的指针,但它是个常指针,不能改变值了。

用sizeof可以计算出数组的容量,而指针永远是4字节

 

5.IP数据包头部是多长?146.0.0.0属于哪一类IP地址?

20字节,B类

 IP地址划分:ABCED类

怎么划分?一个各出现0的位置

A:0+7个0   -     0 + 7个1

B:10 + 6个0      -    10 + 6个1      (128到191前三个数字 )

C:110 + 5个0     -     110 + 5个1

 

6.编程中设计并发服务器,使用多线程和多进程有什么区别?

用多进程每个进程有自己的地址空间(address space),线程则共享地址空间。

所以:

1。速度:线程产生的速度快,线程间的通讯快、切换快,执行开销小,因为他们在同一个地址空间内。
2。资源利用率:线程的资源利用率比较好也是因为他们在同一个地址空间内。
3。同步问题:线程使用公共变量/内存时需要使用同步机制还是因为他们在同一个地址空间内。

但线程不利于资源管理和保护,健壮性降低(一线程死就死),缺乏高精度的访问控制

 

7.linux内核里,内存申请有哪几个函数,各自的区别?

kmalloc、kzalloc、vmalloc

kmalloc() 申请的内存位于物理内存映射区域,而且在物理上也是连续的,它们与真实的物理地址只有一个固定的偏移,因为存在较简单的转换关系,所以对申请的内存大小有限制,不能超过128KB。 

kzalloc() 函数与 kmalloc() 非常相似,参数及返回值是一样的,可以说是前者是后者的一个变种,因为 kzalloc() 实际上只是额外附加了 __GFP_ZERO 标志。所以它除了申请内核内存外,还会对申请到的内存内容清零。

vmalloc() 函数则会在虚拟内存空间给出一块连续的内存区,但这片连续的虚拟内存在物理内存中并不一定连续。由于 vmalloc() 没有保证申请到的是连续的物理内存,因此对申请的内存大小没有限制,如果需要申请较大的内存空间就需要用此函数了。

参考

 

8.驱动里面为什么要有并发,互斥的控制?如何实现

并发(concurrency)指的是多个执行单元同时、并行被执行,而并发的执行单元对 共 享资源(硬件资源和软件上的全局变量、静态变量等)的访问则很容易导致竞态(race conditions) 。 解决竞态问题的途径是保证对共享资源的互斥访问, 所谓互斥访问就是指一个执行单 元 在访问共享资源的时候,其他的执行单元都被禁止访问。 访问共享资源的代码区域被称为临界区, 临界区需要以某种互斥机 制加以保护,

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值