信息安全系统设计基础家庭作业

news/2024/7/2 23:13:14

《深入理解计算机系统》家庭作业

* 8.9

 答案:

进程对

是否并发

AB

AC

AD

BC

BD

CD

 


 * 8.10

答案:

A. 调用一次,返回两次: fork

B. 调用一次,从不返回: execve, longjmp

C. 调用一次,返回一次或者多次: setjmp


* 8.11

 

答案:

这个程序会输出4个“hello”输出行。

因为Fork()函数的作用是调用一次返回两次。根据条件i<2,当 i = 0 时,输出2个hello,当 i = 1 时,输出2个hello。所以输出4个hello。


* 8.12

答案:

这个程序会输出8个“hello”输出行。

因为程序定义了一个doit()函数,里包含了两个Fork(),Fork()函数的作用是调用一次返回两次,所以返回4次,输出4个hello。main()函数中调用了doit()函数所以又输出4个hello

,一共输出8个hello。


** 8.23

答案:

一个可能的原因是,在第一个信号发给父进程之后,父进程进入handler,并且阻塞了SIGUSR2,第二个信号依然可以发送,然而,之后的3个信号便会被抛弃了。因为是连续发送,所以很可能是没等上下文切换,这5个信号就同时发送了。所以只有2个信号被接收。


 ** 9.14

 

答案:

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <unistd.h>

#include <sys/mman.h>

int main()

{

    int fd;

    char *start;

    fd = open("hello.txt", O_RDWR, 0); //打开文件

    start = mmap(NULL, 1, PROT_WRITE, MAP_SHARED, fd, 0);

    close(fd); 

    if(start == MAP_FAILED) return -1;//判断是否映射成功

    (*start) = 'J';

    munmap(start, 1);

    return 0;

}


 * 9.15

答案:

请求

块大小

块头部

malloc(3)

8

0x9

malloc(11)

16

0x11

malloc(20)

24

0x19

malloc(21)

32

0x21


 * 9.19

答案:

1) a

  a、对于伙伴系统,如果要申请大小为33的空间,那么需要分配64个空间。如果申请大小为65的空间,那么块大小就需要128,所以最多可能有约50%的空间被浪费。

  b、最佳适配要搜索所有空间,所以肯定比首次适配要慢一些。

  c、边界标记主要功能是释放一个块时,能立即和前后空闲块合并。如果空闲块不按顺序排列的话,其实也能够和前一个或者后一个空闲块进行合并,但如果要和前后一起合并,可能会有些困难,那需要搜索前后块在空闲链表中的位置,并且删除一个再进行合并。

  d、其实任何分配器都可能有外部碎片,只要剩余的空闲块大小和足够但是单个都不够,就会产生外部碎片。

2) d

  a、块大小递减,首次适配很容易找到,所以分配性能会很高。

  b、最佳适配方法无论怎样,都要搜索所有的链表(除非维护成块大小递增的链表)。

  c、是匹配的最小的。

  d、块大小递增,那么最佳适配法找到的块和首次适配找到的块是同一个,因为最佳适配总是想找一个刚好大于请求块大小的空闲块。

3) c

  保守的意思就是所有可能被引用的堆都会被标记,int像指针,所以可能认为它表示的地址是正在被引用的(实际上它只是个int)。


汇总

* 8.9

* 8.10

* 8.11

* 8.12

** 8.23

** 9.14

* 9.15

* 9.19

共计:十分

 

转载于:https://www.cnblogs.com/20135235my/p/5020319.html


http://lihuaxi.xjx100.cn/news/270023.html

相关文章

漫画 | 程序媛小姐姐带你一次了解什么是排序算法

来源 | 小齐本齐封图 | CSDN 付费下载自视觉中国插入排序借用《算法导论》里的例子&#xff0c;就是我们打牌的时候&#xff0c;每新拿一张牌都会把它按顺序插入&#xff0c;这&#xff0c;其实就是插入排序。齐姐声明&#xff1a;虽然我们用打牌的例子&#xff0c;但是可不能学…

[Python] 练习代码

# from random import randrange # num int(input(摇几次骰子: )) # sidesint(input(筛子有几个面: )) # sum0 # for i in range(num): # sum randrange(sides)1 # print(最终的点数和是 ,sum,平均点数是:,sum/num)# from random import shuffle # from pprint import ppr…

java开发人员技术提升_Java开发初学者如何快速提升编程能力

原标题&#xff1a;Java开发初学者如何快速提升编程能力2019年如何才能学好Java开发?初学者需要注意哪些问题&#xff1f;技术的学习很多人都会有一个共同的问题&#xff0c;那就是该如何选择一门技术学习&#xff0c;或者说如何选择一门编程语言学习&#xff0c;部分人之所以…

周鸿祎在360新员工入职培训上的讲话

我想给新入职的同事讲一讲我的期望&#xff0c;再提几个建议。我这个人喜欢说真话&#xff0c;不喜欢说漂亮话&#xff0c;因为漂亮话没用。但说真话&#xff0c;大家可能不爱听。 首先&#xff0c;大家一定要明白&#xff0c;你自己来360到底想获得什么。 我觉得&#xff0c;第…

[亲测]在Mac下配置php开发环境:Apache+php+MySql

公司给我们配上了高大上的Apple Mac Pro本本&#xff0c;这两天自己正在习惯中。通过虚拟机PD&#xff0c;确实解决了一些因为工作习惯无法在iOS上很好完成的事情&#xff0c;但是我想&#xff0c;既然用起了iOS就尽量将一些事务在iOS环境下处理&#xff0c;免得好似关羽耍着大…

轻松学Pytorch–环境搭建与基本语法

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达基本思路选择以前我用过Caffe&#xff0c;用过tensorflow&#xff0c;最近一直在用pytorch感觉特别好用。所以打算写点我学习的过程跟经验&#xff0c;如果你是一个pytorc…

一份 Spring Boot 项目搭建模板

点击上方蓝色“方志朋”&#xff0c;选择“设为星标”回复“666”获取独家整理的学习资料&#xff01;前言建立一个全新的项目&#xff0c;或者把旧的庞大的项目&#xff0c;进行拆分成多个项目。在建立新的项目中&#xff0c;经常需要做一些重复的工作&#xff0c;比如说拷贝一…

终于有人把计算机视觉讲明白了

在人工智能机器学习的领域中&#xff0c;目前最火的莫过于计算机视觉了&#xff0c;这项技术一直广受关注&#xff0c;而其中的目标检测是计算机视觉领域中最常见的问题之一。从去年的 YOLOv4 发布后&#xff0c;目标检测框架被问的最多的问题就是&#xff1a;“有没有同学复现…