1.在段页式存储管理中,虚拟地址空间是二维的。页式存储管理虚拟地址空间是一维的。段式存储管理虚拟地址空间是二维的。
2.页式管理和段式管理每取一个数据都需要2次访问内存,而段页式管理需要3次访问内存。
3.DMA的英文拼写是“Direct Memory Access”,汉语的意思就是直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式。在DMA模式下,CPU只须向DMA控制器下达指令,让DMA控制器来处理数据的传送,数据传送完毕再把信息反馈给CPU,这样就很大程度上减轻了CPU资源占有率,可以大大节省系统资源。
4.SPOOLing技术是低速输入输出设备与主机交换的一种技术,通常也称为“假脱机真联机”,他的核心思想是以联机的方式得到脱机的效果。低速设备经通道和外设在主机内存的缓冲存储器与高速设备相联,该高速设备通常是辅存。为了存放从低速设备上输入的信息,或者存放将要输出到低速设备上的信息(来自内存),在辅存分别开辟一固定区域,叫“输出井”(对输出),或者“输入井”(对输入)。简单来说就是在内存中形成缓冲区,在高级设备形成输出井和输入井,传递的时候,从低速设备传入缓冲区,再传到高速设备的输入井,再从高速设备的输出井,传到缓冲区,再传到低速设备。
5.在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期(CPU周期)。
指令周期(Instruction Cycle):取出并执行一条指令的时间。
总线周期(BUS Cycle):也就是一个访存储器或I/O端口操作所用的时间。
时钟周期(Clock Cycle):又称节拍周期,是处理操作的最基本单位。(晶振频率的倒数,也称T状态)
指令周期、总线周期和时钟周期之间的关系:一个指令周期由若干个总线周期组成,而一个总线周期时间又包含有若干个时钟周期。
6.以下程序运行后的输出结果是:
#include <stdio.h>
int main()
{
char str[][10]={"china","Beijing"}, *p=str[0];
printf("%s\n", p+10);
return 0;
}
答案:Beijing
7.linux系统中,检查硬盘空间使用情况应该使用(df命令);ping命令使用的协议是(ICMP)。
8.在图采用邻接表存储时,求最小生成树的Prim算法时间复杂度为O(n+e),在采用邻接矩阵存储时,Prim算法时间复杂度为O(n^2)。生成最小生成树的克鲁斯卡尔算法时间复杂度为O(eloge)。求最短路径的Dijkstra算法时间复杂度为O(n^2),Floyd算法时间复杂度为O(n^3)。
9.下面程序的输出结果为:
#include <iostream>
using namespace std;
int main()
{
unsigned int a=1;
cout<<a*-2<<endl;
return 0;
}
答案:4294967294解析:考查的是unsigned int和int在一起的混合运算,int转化为unsigned int,-2的补码为2^32-2,即4294967294,乘以1的结果还是这个数字。
可参考两篇文章:无符号数与有符号数比较和有符号数与无符号数之间运算问题。
关于补码:补码(two's complement) 1、在计算机系统中,数值一律用补码来表示(存储)。主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。2、补码与原码的转换过程几乎是相同的。
正数的补码:与原码相同。负数的补码:负数的补码是对其原码逐位取反,但符号位除外,然后整个数加1。
关于singed与unsigned:整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的数据,比如16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。由于在计算机中,整数是以补码形式存放的。根据最高位的不同,如果是1,有符号数的话就是负数;如果是无符号数,则都解释为正数。同时在相同位数的情况下,所能表达的整数范围变大。另外,unsigned若省略后一个关键字,大多数编译器都会认为是unsigned int。
10.下面程序的输出结果为
#include <iostream>
using namespace std;
class A
{
public:
A(int a)
{
printf("%d ",a);
}
};
A a(1);
int main()
{
printf("main ");
A c(2);
static A b(3);
return 0;
}
答案:1 main 2 3
11.在公司局域网上ping www.taobao.com没有涉及到的网络协议是(C)
A. ARP B.DNS C.TCP D.ICMP
DNS是将域名www.taobao.com映射成主机的IP地址,ARP是将IP地址映射成物理地址,ICMP是报文控制协议,由路由器发送给执行ping命令的主机,而一个ping命令并不会建立一条TCP连接,故没有涉及TCP协议。
12.Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。
ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
13.字节为6位的二进制有符号整数,其最小值是(-32)。
n位二进制无符号整数表示的十进制数范围:0——2^n-1
n位二进制有符号整数表示的十进制数范围:-2^(n-1)——2^(n-1)-1
14.程序输出结果:
#include <stdio.h>
int count = 3;
int main(void)
{
int i, sum, count = 2;
for(i=0,sum=0; i<count; i+=2,count++)
{
static int count = 4; //
count++;
if(i%2 == 0)
{
extern int count; //
count++;
sum += count;
}
sum += count;
}
printf("%d %d\n",count, sum);
return 0;
}
答案:4 20解析:其中static int count=4是定义一个静态局部变量,其特点为:(1)该变量在全局数据区分配内存;(2)静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;(3)静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;(4)它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;故循环进入到第二层的时候,count保存上一次的值,而不是再次初始化为4,这一点我忘记了,是没有运用好。再有extern int count是要引用已经定义好的在main()函数外面的全局变量count,对其做一个声明,而不是引用语句段外面的static变量,而是全局变量声明。理解了这两点才能把问题答对。
15.程序输出结果:
#include <stdio.h>
void func(char str[50])
{
printf("A %d B %d \n",sizeof(str), strlen(str));
}
int main(void)
{
char stra[] = "HelloWorld";
char *strb = stra;
printf("C %d D %d \n",sizeof(stra), sizeof(strb++));
printf("%s\n",strb);
func(++strb);
printf("%s\n",strb);
printf("E %d F %d\n",strlen(stra), strlen(strb++));
printf("%s\n",strb);
return 0;
}
答案:
对于sizeof(strb++),并不对strb进行自增运算,知识简单地求指针的大小。sizeof只是简单的求操作数所占的存储空间,其中的操作数的任何操作都不会执行。
16.
#include <iostream>
using namespace std;
class Base
{
public:
int m_a;
Base(int a=2):m_a(a)
{
printf("A %d ",m_a);
}
virtual ~Base()
{
printf("B %d ",m_a);
}
};
class Derived:public Base
{
public:
Derived(int a=4):Base(a)
{
printf("C %d ",m_a);
}
~Derived()
{
printf("D %d ",m_a);
}
};
int main(void)
{
Base *aa,bb;
aa = new Derived;
delete aa;
return 0;
}
答案:A 2 A 4 C 4 D 4 B 4 B 2解析:需要知道构造和析构函数的调用次序。
17.
#include <iostream>
using namespace std;
struct SC
{
int a;
int b;
int c;
};
struct SD
{
int a;
int b;
int c;
int d;
};
int main(void)
{
struct SC c1[] = {{3},{4},{5},{6}};
struct SD *c2 = (struct SD*)c1 + 1;
printf("%d %d %d %d\n",c2->a,c2->b,c2->c,c2->d);
return 0;
}
答案:0 0 5 0解析:不会
18.以下哪个协议通常用来收取邮件(C)
A.SMTP B.MAIL C.POP3 D.SNMP (简单网络管理协议) E.ICMP
SMTP(Simple Mail Transfer Protocol)简单邮件发送协议
POP3(Post Office Protocol)邮局协议 SMTP和POP3都属于应用层协议
一个电子邮件系统具有三个主要组成构件,就是用户代理、邮件服务器以及邮件发送协议(SMTP)和邮件读取协议(POP3)
不要把SMTP和POP3协议弄混。发件人的用户代理向发送方邮件服务器发送邮件,以及发送方邮件服务器向接收方邮件服务器发送邮件,都是使用SMTP协议。而POP3协议则是用户代理从接受方邮件服务器上读取邮件的时候所使用的协议。
19.
int main(void)
{
int m = 0256,n = 256;
printf("%o %o\n",m,n);
return 0;
}
答案:256 400解析:八进制
20.计算机在内存中存储数据时使用了大、小端模式,请分别写出A=0X123456在不同情况下的首字节是,大端模式:0X12 小端模式:0X56 X86结构的计算机使用小端模式。
一般来说,大部分用户的操作系统(如windows, FreeBsd,Linux)是小端模式的。少部分,如MAC OS,是大端模式的。
所谓的大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中。所谓的小端模式,是指数据的高位保存在内存的高地址中,而数据的低位保存在内存的低地址中。
21.进程切换需要注意哪些问题?
答案:保存处理器PC寄存器的值到被中止进程的私有堆栈;保存处理器PSW寄存器的值到被中止进程的私有堆栈;保存处理器SP寄存器的值到被中止进程的进程控制块;保存处理器其他寄存器的值到被中止进程的私有堆栈;自待运行进程的进程控制块取SP值并存入处理器的寄存器SP;自待运行进程的私有堆栈恢复处理器各寄存器的值;自待运行进程的私有堆栈中弹出PSW值并送入处理器的PSW;自待运行进程的私有堆栈中弹出PC值并送入处理器的PC。
①PC寄存器:PC计数器详解
②PSW寄存器:PSW寄存器各位标志功能意义 PSW寄存器
③SP寄存器:堆栈指针寄存器SP详解
可参考:计算机操作系统进程切换详解
关于寄存器的知识可参考:8086 CPU 寄存器简介
2330

被折叠的 条评论
为什么被折叠?



