存储器和CPU的连接;
现在的计算机MAR,MDR通常集成在CPU内部。存储芯片内只需一个普通的寄存器(暂存输入,输出数据)。
位扩展,字扩展,字位同时扩展;
位扩展:
位扩展的增加的是主存的存储字长,数据总线一次可以读写的位数增加,
这里A代表的是地址线,D代表的是数据线,WE是读/写控制线,这里高电平表示写,低电平表示读,CS是片选线,这里高电平意味有效,这里一直是接通的,实际上可以看成两个存储器并在了一起。(同一个地址管理的内存空间变大了,比如这里原本管理的是一位,现在变成两位了)
字扩展:
字扩展,数据总线一次读取的字长并没有改变,更像是扩大的主存的空间,这里控制存储芯片的方法是线选法,通过给片选线输入不同的选片信号决定选择哪一个存储片,片选信号要保证在同一时刻只有一个存储片是接通的,这里是因为所有的存储片共用同一条数据总线,如果同时接入多个存储片的话,那么在传输数据的时候会发生混乱.(一个地址管理的内存空间并没有变大,原来是8位,现在也是8位,但地址变多了,所以对应的总内存变大了)
但是这样会遭受浪费,因为两根地址线只能传输 01 或者 10 ,而不能传输 00 和 11 ,这样就导致可以控制的内存单元减少。像图中展示的 n条线只能发出n个选片信号,也就是只能控制n个存储器,而且对应的地址空间也不连续,没有00,11开头的地址。
这里注意片选信号是通过专门的地址线输入的。
还有一种方法是 1-2译码器,就是用一根地址线,然后分支出两条线,一条线接上非门,然后两条分支出的线分别和两个片选线相加,这样只需要一根地址线就可以控制两个存储片,同样的还有 3-8译码器,和上面的原理类似(需要三根地址线,因为三位的二进制才能表示八个单位 000~111),这种方法,就可以实现 n条线 发出 2的n次方的选片信号,而且地址空间是连续的。
字位同时扩展:
这个看图还是蛮容易理解的,把经过移码器分支的地址线再次分支,然后把来自同一分支的分支线接到同一个经过位扩展的不同存储片上,这里也可以看到位扩展实现里,存储字长的扩展,由原本的4位(每个存储器)扩展到了8位(这里是两个存储器)。
外部存储器:
对于磁表面存储器,是通过控制电流产生的磁场来在磁层上形成方向不同SN极性来表示 0和1 的。
工作要求高的原因是因为是通过磁场写入的,那么自然也会受到外来磁场的影响,如果外来磁场比较强的话,就可以导致磁层内存储的SN极被毁或者方向改变。
这里需要注意的是一个盘片的上下层都是可以记录数据的。 磁道指的是记录面的中心向外辐射状排列的圆。
磁盘的性能指标:
磁盘的容量:一个磁盘所能存储的字节总数称为磁盘容量。磁盘容量有非格式化和格式化容量之分。
非格式化容量是指磁记录表面可以利用的磁化单元总数。
格式化容量是指按照某种特定的记录格式所能存储信息的总量。
记录密度:记录密度是指盘片单位面积上记录的二进制的信息量,通常以道密度,位密度和面密度表示。
道密度是沿磁盘半径方向单位长度上的磁道数;
位密度是磁道单位长度上能记录的二进制代码位数;
面密度是位密度和道密度的乘积。
这里要注意的是,磁盘所有磁道记录的信息量是一定相等的,并不是圆越大信息越多,故每个磁道的位密度都不同,也就是越靠近内侧的磁道位密度越大。
平均存取时间:
从上面的那个磁盘的图可以看到,磁盘是通过磁头读取信息的,磁头由移动臂控制移动,移动臂需要控制磁头移动到对应的磁道,然后盘片也需要旋转移动到对应的扇区,等这些准备工作都做完之后,然后才开始读取传输,所有平均存取时间是由寻道时间,旋转延迟时间和传输时间的加和。
数据传输率:
磁盘存储器在单位时间内向主机传送数据的字节数,称为数据传输率。
假设磁盘转数为 r (转/秒) ,每条磁道容量为N字节,则数据传输率为rN。
磁盘地址;
磁盘的地址一般要包括 : 驱动器号 ,柱面(磁道)号,盘面号,扇区号;
一台电脑可能有多个硬盘,所以要有驱动器号说明是那个磁盘;
柱面号用来移动磁头臂到对应的磁道;
盘面号向磁盘说明要激活哪一个磁头;
扇区号说明要读哪一片区域的数据,通过旋转将特定扇区划过磁头下方。
硬盘的工作过程:
注意是 硬盘 ,不是磁盘,硬盘是磁盘的一种具体类型,它使用旋转的磁性盘片来存储数据,而磁盘是一个更通用的术语,可用于描述各种使用磁性媒体或其他技术来存储数据的设备。
硬盘的主要操作是寻址、读盘、写盘,每个操作都对应一个控制字,硬盘工作时,第一步是取控制字,第二步是执行控制字。
硬盘属于机械式部件,其读写操作是串行的,不可能在同一时刻即读又写,也不可能同一时刻读两组数据或写两组数据。
这里刚好提一下之前迷的串行,并行,并发
串行:在一个时间段内只能执行一个操作或任务,只有这个任务或操作结束之后才能进行下一个操作或者任务。在宏观上和微观上都是依次执行的。(一个工人一次干一个活)
并行:在一个时间段内可以同时执行多个操作或者任务,这几个操作和任务是同时进行的,每个任务都有自己的处理单元,可以独立执行。在宏观和微观上都是同时执行。(多个工人干多个活)
并发:在一个时间段内可以交替的执行多个操作或任务,更系统的说法应该是多个任务在重叠的时间段内执行,这并不一定意味着它们同时执行。任务可以交替执行,通过时间分片或者任务切换来模拟并发,这多个任务只有一个处理单元,所以微观上看任务的执行不是同时的,但宏观上在一个时间段内多个任务是同时执行的。(这个时间段内多个任务都在向前推进)(一个工人交替干多个活)
这个题不能用
a[i] == ' ';
来判断是否等于空格,但实际上好像应该是可以的,只是这里答题过不去。
下面这个是用 isspace函数判断的
int main()
{
char a[1000] = { 0 }, b[1000] = { 0 };
gets(a);
gets(b);
int i = 0, j = 0;
while(1)
{
if (tolower(a[i]) == tolower(b[j]))
{
i++; j++;
}
else if (isspace(a[i]))
i++;
else if (isspace(b[j]))
j++;
else
{
printf("NO\n"); return 0;
}
if (a[i] == 0 && b[j] == 0)
{
printf("YES\n"); return 0;
}
}
}