问答题1
问答题1:一进程刚获得三个主存块的使用权,若该进程访问页面的次序是{1321215123},采用 LRU 算法,缺页数是几次?
LRU 算法是先置换出不常用的页面,如果一个页面刚刚被访问过,那么会放到队列尾部
先进先出算法:不管页面是否常用,都按照先进先出的思想进行置换页面.
下面是LRU算法
访问页面 | 1 | 3 | 2 | 1 | 2 | 1 | 5 | 1 | 2 | 3 |
---|---|---|---|---|---|---|---|---|---|---|
物理块1 | 1 | 1 | 1 | 3 | 3 | 3 | 2 | 2 | 5 | 1 |
物理块2 | 3 | 3 | 2 | 1 | 2 | 1 | 5 | 1 | 2 | |
物理块3 | 2 | 1 | 2 | 1 | 5 | 1 | 2 | 3 | ||
是否缺页 | 是 | 是 | 是 | 否 | 否 | 否 | 是 | 否 | 否 | 是 |
1 代表缺页 ,0 代表不缺页 ,所以缺页数是5次
下面是先进先出算法:
访问页面 | 1 | 3 | 2 | 1 | 2 | 1 | 5 | 1 | 2 | 3 |
---|---|---|---|---|---|---|---|---|---|---|
物理块1 | 1 | 1 | 1 | 1 | 1 | 1 | 3 | 2 | 2 | 5 |
物理块2 | 3 | 3 | 3 | 3 | 3 | 2 | 5 | 5 | 1 | |
物理块3 | 2 | 2 | 2 | 2 | 5 | 1 | 1 | 3 | ||
是否缺页 | 是 | 是 | 是 | 否 | 否 | 否 | 是 | 是 | 否 | 是 |
置换了6次页面.
问答题2: 啥是可重入函数?
可重入函数主要用于多任务环境中,简单来说就是可以被中断的函数,即在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,返回控制时不会出现什么错误;也意味着它除了使用自己栈上的变量以外不依赖于任何环境(包括static),这样的函数就是 purecode(纯代码)可重入,可以允许有该函数的多个副本在运行,由于它们使用的是分离的栈,所以不会互相干扰。
问答题3:啥是不可重入函数?
而不可重入的函数由于使用了一些系统资源,比如全局变量区、中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。
可重入函数确实需要访问全局变量(包括 static),一定要注意实施互斥手段。它在并行运行环境中非常重要,但是一般要为访问全局变量付出一些性能代价。编写可重入函数时,若使用全局变量,则应通过关中断、信号量(即P、V操作)等手段对其加以保护。
问答题4:使用C语言将一个1G字节的字符数组从头到尾全部设置为字’A’,在一台典型的当代PC上,需要花费的CPU时间的数量级接近多少秒?
当代典型PC机运算速度可达10亿次/秒(109),即执行一条典型指令 1/1,000,000,000秒 = 1 纳秒
1GB = 2 的 30 次方 B = 8的10次方 B(8的10次方大小为10亿多一点)
编程题
编程题1:年终奖
小东所在公司要发年终奖,而小东恰好获得了最高福利,他要在公司年会上参与一个抽奖游戏,游戏在一个6*6
的棋盘上进行,上面放着 36 个价值不等的礼物,每个小的棋盘上面放置着一个礼物,他需要从左上角开始游戏,每次只能向下或者向右移动一步,到达右下角停止,一路上的格子里的礼物小东都能拿到,请设计一个算法使小东拿到价值最高的礼物
给定一个6*6
的矩阵 board,其中每个元素为对应格子的礼物价值,左上角为[0,0],请返回能获得的最大价值,保证每个礼物价值大于100小于1000
提示:动态规划
初始化二维数组的第一行和第一列,进行迭加
动态方程为 v[i][j] = max(v[i-1][j],v[i][j-1])+board[i][j]
表示当前最大值是上面的元素和左边元素的较大值然后再加上当前元素的值.
最后返回数组的最后一个值.
class Bonus {
public:
int getMost(vector<vector<int> > board) {
int row = board.size();
int col = board[0].size();
vector<vector<int>>v(row,vector<int>(col,0));
v[0][0] = board[0][0];
for(int i= 0;i<row;++i){
for(int j = 0;j<col;++j){
if(i==0 && j==0){
continue;
}
else if(i == 0){
v[i][j] = v[i][j-1]+board[i][j];
}
else if(j==0){
v[i][j] = v[i-1][j]