20231327计算机基础与程序设计第9周作业

发布时间 2023-11-26 16:40:53作者: 落望于灵

学期(2023-2024-1) 学号(20231327) 《计算机基础与程序设计》第9周学习总结

作业信息

课程 <班级的链接>(2023-2024-1-计算机基础与程序设计
要求 <作业要求的链接>(2023-2024-1计算机基础与程序设计第9周作业)
目标 <认识操作系统,掌握函数指针使用>
作业正文 https://i.cnblogs.com/posts/edit

教材学习内容总结

《计算机科学概论》
1.操作系统的基本功能:
操作系统是一种软件系统,负责管理和控制计算机硬件资源。
主要功能包括进程管理、内存管理、文件系统、设备驱动程序、用户接口、网络管理、安全性和权限控制、调度程序等。
2.CPU调度:
操作系统中的调度程序负责管理和调度CPU的使用。
CPU调度的目标包括公平性、效率、响应时间和吞吐量。
常见的调度算法有先来先服务、短作业优先、轮转调度
3.内存管理:
内存管理是操作系统的一个核心功能,它负责有效地分配和管理计算机的内存资源。内存管理的目标是最大限度地提高系统的性能、确保应用程序正常运行,并防止因为内存溢出或其他错误而导致系统崩溃。
单块、分区和页式内存管理是不同的内存管理策略,它们在处理内存的方式上有所不同:
单块内存管理:
单块内存管理是最简单的内存管理方式。
整个系统只有一个内存块,所有进程共享这一块内存。
进程之间没有隔离,容易导致进程间的相互影响和冲突。
通常用于简单的嵌入式系统等场景,不适用于多任务的操作系统。
分区内存管理:
分区内存管理将物理内存划分为若干个固定大小的分区。
每个分区可以分配给一个进程,实现了进程之间的隔离。
有两种分区方式:
等分分区: 将内存均分为若干个相等的分区,每个进程占用一个分区。
不等分分区: 将内存按进程的实际需要进行分区。
分区内存管理存在外部碎片的问题,即已分配的分区之间的未使用内存。
页式内存管理:
页式内存管理采用分页的方式来管理内存。
将物理内存和逻辑内存都分割为固定大小的页(通常是4KB)。
进程的地址空间也被划分为相同大小的页。
内存分配和访问以页为单位,提高了内存的利用率,减少了内部碎片。
页表用于映射逻辑地址到物理地址,实现了虚拟内存的概念。
4.进程管理
进程调度: 进程调度是 CPU 调度的一部分。操作系统的调度程序决定了系统中哪个进程将获得 CPU 时间,并且在多任务环境中,它需要在多个就绪态进程中进行选择。这个选择过程影响了系统的性能、响应时间和吞吐量。
《C语言程序设计》
指针:
内存操作: 指针允许直接访问和修改内存中的数据,使得程序能够更灵活地处理数据。
函数参数传递: 通过传递指针作为参数,可以实现在函数之间共享数据,避免复制大量数据的开销。
动态内存分配: 使用指针结合malloc、calloc等函数可以在运行时动态分配内存,避免静态内存的限制。
数组和字符串操作: 指针可以用于遍历数组和字符串,简化对这些数据结构的操作。
数据结构: 指针是构建各种数据结构(链表、树等)的基础,它们提供了灵活的存储和访问方式。
函数返回值: 指针允许函数返回动态分配的内存地址,避免了返回大型结构或数组的开销。
处理复杂的数据结构: 结构体和联合体经常与指针一起使用,允许在内存中有效地组织和访问数据。
文件操作: 指针可用于在文件中移动位置、读取和写入数据,实现对文件的灵活操作。
多维数组: 指针可以用于处理多维数组,提高对数组的访问效率。
函数指针: 指针可以指向函数,允许在运行时动态选择调用哪个函数。

教材学习中的问题和解决过程

对于操作系统以及内存,进程,cpu等的关系,进行了例子理解:
比喻故事:数字工厂的生产奇迹
操作系统(OS): 操作系统是工厂的总经理,但现在她的角色更像是一个超级调度员。她不仅协调整个工厂的生产计划,还负责将原材料分发给各个车间,并监控整个生产过程。
进程: 现在,每个产品的生产过程不再是一个单一的进程,而是被分解成多个任务和子任务。每个子任务都是一个小的生产过程,比如组装电路板、安装屏幕等。这些子任务是相互协作的小进程。
CPU: CPU 不再是简单的工人,而是具有多个工作岗位的超级机器人。每个机器人都可以同时执行多个任务,完成各种工作。操作系统通过智能分配,确保每个机器人都在高效地工作,不浪费时间。
内存管理: 工厂的原材料仓库被升级成一个自动化的仓库,可以根据需要动态调整存储空间。这个仓库有一个智能的管理系统,负责分配和释放原材料。操作系统通过与这个管理系统的协作,确保每个车间都有足够的原材料,并避免了仓库空间的浪费。
详细解释:
操作系统: 操作系统作为超级调度员,不仅要制定整个工厂的生产计划,还需要智能地分发原材料,监控整个生产过程。她不仅要考虑生产计划的优化,还要处理突发情况,比如某个车间发生了故障。
进程: 每个产品的生产过程被拆分成多个子任务,每个子任务都是一个小的生产过程。这些子任务相互协作,形成整个产品的生产流程。这些子任务可以并行执行,提高了整体的效率。
CPU: CPU 不再是单一工作的工人,而是具有多个执行单元的超级机器人。每个机器人可以同时处理多个任务,适应多任务的环境。操作系统通过智能调度,确保每个机器人都在高效地工作,不浪费时间。
内存管理: 原材料仓库变成了一个自动化的仓库,可以根据需要动态调整存储空间。智能管理系统负责分配和释放原材料。操作系统通过与管理系统的协作,确保每个车间都有足够的原材料,并避免了仓库空间的浪费。

基于AI的学习



代码调试中的问题以及解决

1.%%表示一个百分号,""由于有特殊含义,无法直接表示出来,
2.如果你想在 C 语言中输出双引号 ",需要使用转义字符 "
3.%s表示字符串。
4.在 C 语言中,数组的大小必须在编译时就是确定的常量,这是因为数组在内存中需要一块连续的空间来存储,而编译器需要在编译时确定数组的大小以便正确分配内存。因此,数组的大小不能是变量,它必须是一个常量表达式。当你写 int score[n]; 这样的代码,n 是一个变量,而不是编译时就能确定的常量,这会导致编译错误。如果你希望在运行时动态确定数组的大小,就需要使用动态内存分配,使用 malloc 或 calloc 函数。这样,数组的大小可以在运行时确定,但你需要手动管理内存的分配和释放。