2022-2023 20221403《计算机基础与程序设计》第九周学习总结
《计算机基础与程序设计》第九周学习总结
要求
这个作业属于哪个课程 | <班级的链接>(如2022-2023-1-计算机基础与程序设计) |
---|---|
这个作业要求在哪里 | <作业要求的链接>(如2022-2023-1计算机基础与程序设计第九周作业) |
这个作业的目标 | CPU调度,操作系统责任,内存与进程管理,分时系统,文件、文件系统 |
作业正文 | ... 本博客链接 |
教材学习内容总结
- 操作系统责任
- 操作系统是指管理计算机资源并为系统交互提供界面的系统软件。
- CPU调度
- CPU调度就是确定把哪个处于准备就绪状态的进程移入运行状态。分为两种:非抢先调度和抢先调度
- 非抢先调度:将一个进程从运行状态切换到等待状态或程序终止的
- 抢先调度:将一个进程从运行状态转移到准备就绪状态或一个进程从等待状态转移到准备就绪状态
- 内存管理
-
逻辑地址与物理地址
(1). 逻辑地址:(虚拟地址或相对地址)是相对于程序来说的一个地址。每当 CPU 运行一个进程时,它都会为该进程分配一个特定的内存。此分配的内存空间位于 CPU 为进程生成逻辑地址。
(2). 物理地址:是主储存设备中的真实地址。
可以参考CSDN上博客《浅谈逻辑地址和物理地址》 -
单块内存管理:物理地址等于逻辑地址加上程序在物理主存中的起始地址。
-
分区内存管理
(1).固定分区: 引导OS初期就固定分好区间,以后不再变
(2).动态分区:根据需求动态分配区间,区间可以在内存中移动
基址寄存器存储分区当前分区的起始位置。
界限寄存器存储分区的长度
-
页式内存管理
帧描述内存,页描述进程。内存加载进程的方式是通过帧载入页
程序面向的是页地址,这时地址联编需要找的是帧,这就需要一本字典,即PMT(page map table)。每一个进程都需要维护一张PMT,表中记录每一个页对应的帧
4.文件和文件系统
- 文件:数据的有名集合,用于组织二级存储设备。
- 文件系统:操作系统为他管理的文件提供的逻辑视图
- 磁盘调度
CPU调度相似,磁盘调度也有多种算法。
- 先到先(FCFS):按照请求到达的顺序处理他们
- 最短寻到时间优先(SSTF):通过尽可能少的读写头移动满足所有未解决的请求(最近优先)
- SCAN磁盘调度:读写头先移动到一端进行满足,再移动到另一端进行满足请求。
教材学习中的问题和解决过程
- 开始我不理解分区问题,即什么是最先分配,最佳分配,最差分配。
解决过程:先通过查阅课本,了解初步概念。
在B站找了相关视频,参考链接内存管理动态分区分配问题
上周错题总结
- Which of the following creates an object from a class?
A.
Encapsulation
B.
Inheritance
C.
Abstraction
D.
Polymorphism
E.
Instantiation
正确答案:E 你的作答: B - Modern compilers translate high-level language programs into the corresponding program in machine code.
正确答案: 正确
你的作答: 错误 - A Boolean expression may be an arithmetic expression followed by an integer.
正确答案: 错误
你的作答: 正确
代码调试中的问题和解决过程
本周实验代码:
点击查看代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
int q,i,l,h,t=0,d=0;
float y,n;
char w;
srand(time(NULL));
int count=0;
do
{
for(i=1; i<=10; i++)
{
int a=rand()%10+1;
int b=rand()%10+1;
q=rand()%4;
h=rand()%4;
if(q==0)
{
w='+';
y=a+b;
}
else if(q==1)
{
w='-';
y=a-b;
}
else if(q==2)
{
w='*';
y=a*b;
}
else
{
w='/';
y=(float)a/b;
}
printf("%d%c%d\n",a,w,b);
printf("input:");
scanf("%f",&n);
if(y==n)
{
printf("right!\n");
count++;
d=1;
t=1;
}
else
{
printf("wrong\n");
d=0;
t=0;
}
if(t==1)
{
switch(h)
{
case 0:
printf("Very good!\n");
break;
case 1:
printf("Excellent!\n");
break;
case 2:
printf("Nice work!\n");
break;
default:
printf("Keep up the good work!\n");
}
}
else
{
switch (h)
{
case 0:
printf("No. Please try again.\n");
break;
case 1:
printf("Wrong. Try once more.\n");
break;
case 2:
printf("Don’t give up!\n");
break;
default:
printf("Not correct. Keep trying.\n");
}
}
}
printf("总分:%d\n",count);
l=count*10;
printf("正确率:%d%%\n",l);
if(l<=75)
printf("你的分数太低,请重做!");
}
while(l<=75);
return 0;
}
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第九周 | 300/1800 | 1/16 | 30/90 |