作业信息
|这个作业属于哪个课程| https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP|
|这个作业要求在哪里|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK09|
|这个作业的目标|1、操作系统责任 2、内存与进程管理 3、分时系统 4、CPU调度 5、文件、文件系统 6、文件保护 7、磁盘调度|
|作业正文|https://i.cnblogs.com/posts/edit;postId=18565697|
教材学习内容总结
《计算机科学概论(第七版)》第 10 章:操作系统基础
操作系统的概念与功能:操作系统是管理计算机硬件和软件资源的程序,是用户与计算机硬件之间的接口。其主要功能包括资源管理(如 CPU、内存、外设等)和任务调度。核心功能涵盖进程管理、内存管理、文件系统管理、设备管理以及用户界面。
进程管理:进程是程序的一个执行实例,拥有独立的内存空间和执行状态,包括运行态、就绪态、阻塞态等。操作系统依据特定的调度算法来决定进程的运行顺序,常见的调度算法有先来先服务、短作业优先、优先级调度、时间片轮转等。
内存管理:操作系统负责为进程分配内存,常见的内存分配方式有连续内存分配、分页系统、分段系统。虚拟内存技术可通过硬盘空间模拟出比物理内存更大的内存空间,使程序能够使用更多内存。
文件系统:文件是数据存储的基本单位,操作系统负责管理文件的创建、删除、读取和写入等操作,并通过目录结构组织文件,还可对文件进行权限控制,文件通常存储在硬盘等外部存储设备上。
输入输出管理:输入输出设备包含键盘、鼠标、显示器、硬盘等。操作系统通过提供缓冲区和 I/O 调度算法,提高数据传输效率,减少等待时间 。
《计算机科学概论(第七版)》第 11 章:数据库系统
数据库系统概述:数据库是有组织的数据集合,由数据库管理系统进行管理,可提供高效的数据存储、查询、更新和管理功能。数据库管理系统能够确保数据的完整性、一致性和安全性。
数据模型:主要有层次模型、网状模型和关系模型。层次模型以树形结构组织数据;网状模型以图形结构组织,更为灵活;关系模型以二维表格形式组织,是目前最为常用的数据模型,关系数据库管理系统采用此模型。
关系数据库:表是基本存储单位,由列(属性)和行(记录)构成。主键用于唯一标识每条记录,外键用于建立表之间的联系。数据完整性包括实体完整性、参照完整性和域完整性等。
SQL 语言:SQL 是用于访问和操作数据库的标准语言,涵盖数据查询(SELECT)、数据操作(INSERT、UPDATE、DELETE)、数据定义(CREATE、ALTER、DROP)以及数据控制(GRANT、REVOKE)等功能。
数据库设计:实体 - 关系模型是一种图形化的数据库设计工具,用于描述数据库中的实体及其关系。规范化可消除冗余数据、避免更新异常,常见的规范化范式有第一范式、第二范式、第三范式等 。
《C 语言程序设计》第 8 章:指针和数组
指针基础:指针是存储内存地址的变量,其值为另一个变量的地址,通过指针可以访问和操作该地址所指向的数据。指针运算包括加法、减法等,指针类型必须与所指向的数据类型一致。
指针与数组的关系:数组名实际上是指向数组首元素的指针。可以通过指针运算来访问数组的元素,例如*(arr + i)等同于arr[i]。二维数组的元素也可以通过指针操作进行访问,二维数组可以视为指向指针的指针。
指针与函数:使用指针可以传递变量的地址,使得函数能够修改传入的变量。函数也可以返回指针,如返回动态分配的内存地址等。
动态内存分配:C 语言提供了malloc()、calloc()、realloc()和free()等动态内存分配函数。malloc()用于分配一块指定大小的内存并返回该内存的指针;calloc()分配指定数量和大小的内存,并初始化为 0;realloc()可调整已经分配内存的大小;free()则用于释放之前分配的内存。
多维数组与指针:多维数组本质上是指向指针的指针,二维数组可以通过指针进行遍历和访问 。
教材学习中的问题和解决过程
基于AI的学习
C语言 指针和return 区别?
C语言中指针与return的区别
一、概念本质
指针:指针是一种变量,它存储的是另一个变量的内存地址。通过指针可以间接访问和操作所指向的变量。例如:
int num = 10;
int *ptr = # // ptr是一个指针,指向num的地址
return:return是一个关键字,用于结束函数的执行,并将一个值(如果函数有返回类型)返回给调用该函数的地方。例如:
int add(int a, int b) {
return a + b;
}
二、功能用途
指针
数据共享与修改:可以在函数间共享数据,并且能够修改函数外部变量的值。例如:
void modifyValue(int *ptr) {
*ptr = 20;
}
int main() {
int num = 10;
int *ptr = #
modifyValue(ptr);
// 此时num的值已经被修改为20
return 0;
}
- 动态内存分配:用于管理动态分配的内存,如
malloc
函数返回的是一个指向动态分配内存的指针。
int *arr = (int *)malloc(5 * sizeof(int)); - 构建复杂数据结构:如链表、树等数据结构中,指针用于连接各个节点。
return
提供函数结果:对于计算型函数,return返回计算结果。例如一个计算平方的函数:
int square(int num) {
return num * num;
} - 表示函数执行状态:在某些情况下,
return
可以返回一个表示函数执行成功或失败的值(例如返回0表示成功,返回非0值表示失败)。 - 控制程序流程:函数执行到
return
语句时,会立即结束函数并返回,从而改变程序的执行流程。
三、存储内容
指针:存储的是内存地址,这个地址指向内存中的某个数据对象(如变量、数组等)。地址的值取决于操作系统的内存管理机制和变量在内存中的分配位置。
return:返回的值可以是各种数据类型,如整数、浮点数、字符、结构体等,取决于函数的返回类型声明。例如:
// 返回整数
int getValue() {
return 5;
}
// 返回结构体
struct Point {
int x;
int y;
};
struct Point getPoint() {
struct Point p = {1, 2};
return p;
}
四、使用限制
指针
空指针问题:如果指针没有被正确初始化或者指向的内存被释放后再使用,可能会导致空指针异常,使程序崩溃。
指针越界:在使用指针访问数组等数据结构时,如果超出了有效范围,会导致未定义行为。
指针类型匹配:在进行指针运算和赋值时,要注意指针类型的匹配,不同类型的指针不能随意混用。
return
返回值类型匹配:函数返回值的类型必须与函数声明的返回类型一致。如果函数声明为返回int类型,就不能返回一个double类型的值。
函数内部局部变量的返回限制:函数内部的局部变量在函数结束时会被销毁,如果返回指向局部变量的指针或者引用(在C++中),会导致错误,因为返回后再访问该指针指向的内容是未定义行为。但是对于基本数据类型的局部变量,可以返回其值,因为返回的是一个副本。例如:
int *badFunction() {
int num = 10;
return # // 错误,返回局部变量的地址
}
int goodFunction() {
int num = 10;
return num; // 正确,返回局部变量的值(副本)
}