2024-2025-1 20241328 《计算机基础与程序设计》第贰周学习总结
作业信息
课程 | 2024-2025-1-计算机基础与程序设计 |
---|---|
作业要求 | 2024-2025-1计算机基础与程序设计第二周作业 |
这个作业的目标 | 数字化,信息安全,自学教材,计算机科学概论(第七版)第1章并完成云班课测试,《C语言程序设计》第1章并完成云班课测试,参考上面的学习总结模板,把学习过程通过博客(随笔)发表,博客标题“学年 学号 《计算机基础与程序设计》第二周学习总结”,博客(随笔)要通过作业提交,截至时间本周日 23:59。 |
作业正文 | 2024-2025-1 20241328 《计算机基础与程序设计》第贰周学习总结 |
教材学习内容总结
- 在《计算机科学概论》第一章中,通过学习,我对通用的计算机术语有了初步的认识和了解,了解了计算机系统的分层,对计算机的发展历史也有了认识。
- 《C语言程序设计》第1章学习后,我知道了为什么要学习编程:随着时代的发展,于信息接轨是我们的必须,无论未来在哪个行业,是否从事计算机相关的技术工作,掌握计算思维都是大有裨益,甚至是必须的,而学习编程是了解和检修计算思维的最佳途径。
教材学习中的问题和解决过程
-
问题1:阅读《c语言》第一章,对课后习题产生疑问:“总结目前排名前十的编程语言各自的特点和主要应用领域。”
-
问题1解决方案:向ai提问得出结果:
一、Python
(一)特点
易学:语法极其简单1。
免费、开源:属于FLOSS(自由/开放源码软件)1。
高层语言:编写程序时无需考虑内存管理等底层细节1。
可移植性强:被移植到众多平台,如Linux、Windows等多种系统1。
解释性:可直接从源代码运行,先转换为字节码中间形式再译为机器语言1。
面向对象:支持面向过程和面向对象编程1。
可扩展性:部分程序能用其他语言(如C/C++)编写1。
可嵌入型:可嵌入到C/C++程序中提供脚本功能1。
丰富的库:标准库庞大,可处理正则表达式、文档生成等多种工作1。
(二)主要应用领域
WEB开发:有很多免费数据函数库、网页模板系统和与服务器交互的库,可搭建web框架1。
桌面软件
网络编程
爬虫开发
云计算开发
人工智能
自动化运维
金融分析:用于量化交易、金融分析,在金融工程领域使用最多且重要性逐年提高,擅长策略回测,语言结构清晰简单、库丰富、科学计算和统计分析能力强,生产效率高于C、C++、Java等1。
科学计算、数据分析
游戏开发:比Lua有更高阶抽象能力,用较少代码描述游戏业务逻辑,适合编写1万行以上项目,PyGame模块可用于编写游戏1。
二、C
(一)特点
简洁紧凑、灵活方便:关键字少,程序书写自由,将高级语言结构语句与低级语言实用性结合,主要用小写字母表示1。
运算符丰富:共有34个运算符,把括号、赋值、强制类型转换等作为运算符处理,运算类型和表达式类型多样化1。
数据结构丰富:有整型、实型等多种数据类型,能实现复杂数据类型运算,引入指针概念使程序效率更高,图形功能强大,计算和逻辑判断功能强1。
结构式语言:代码及数据分隔化,程序各部分除必要信息交流外彼此独立,以函数形式提供给用户,函数调用方便,有多种循环、条件语句控制程序流向,使程序完全结构化1。
语法限制不太严格、程序设计自由度大
允许直接访问物理地址、可直接对硬件进行操作
程序生成代码质量高、执行效率高
适用范围大、可移植性好
(二)主要应用领域
系统软件开发:用于开发操作系统(如Windows、Linux、Unix)、驱动系统(主板驱动、显卡驱动)、数据库(DB2、Oracle、sql)等1。
应用软件开发:如办公软件(WPS)、图形图像多媒体(ACD)、嵌入式软件开发(智能手机)等1。
三、Java
(一)特点
简单性
面向对象
分布式
健壮性
安全性
体系结构中立
可移植性
解释型
高性能
多线程
动态性
(二)主要应用领域
嵌入式领域
大数据技术
软件工具
网站应用
金融服务行业的服务器应用
交易系统
J2ME Apps
高频交易领域
科学应用
安卓Apps
四、C++
(一)特点
尽量兼容C
支持面向对象的方法
语言简洁灵活
运算符和数据结构丰富
具有结构化控制语句
程序执行效率高
同时具备高级语言和汇编语言的优点
(二)主要应用领域
系统软件开发:在操作系统、驱动开发等方面有应用。
应用软件开发:在多种应用场景下发挥作用。
五、JavaScript
(一)特点
脚本语言:可以直接嵌入到HTML页面中,无需编译就可在浏览器中运行。
动态类型:变量的数据类型在运行时确定。
基于对象:以对象为基础,所有事物都可以被视为对象。
事件驱动:通过响应事件来执行操作,例如用户点击按钮等事件。
跨平台性:可在多种浏览器和平台上运行。
(二)主要应用领域
前端开发:用于创建交互式的网页界面,如网页特效、表单验证等。
后端开发:借助Node.js 等技术也可用于服务器端开发。
移动应用开发:可用于混合式移动应用开发。
六、C#
(一)特点
简单易学:语法相对简单,与Java等语言有相似之处。
面向对象:具有类、对象、继承、多态等面向对象特性。
类型安全:在编译时进行类型检查,减少运行时错误。
自动垃圾回收:不需要程序员手动管理内存回收。
集成开发环境友好:在Visual Studio等开发环境下有很好的开发体验。
(二)主要应用领域
Windows应用开发:开发Windows桌面应用程序。
游戏开发:用于开发基于Windows平台的游戏。
企业级应用开发:在企业内部的业务系统开发中有广泛应用。
七、Swift
(一)特点
安全:具有多种安全特性,可避免常见的编程错误。
快速:性能较好,编译和执行速度较快。
现代语法:语法简洁、易读,支持很多现代编程概念。
与Objective - C兼容:可与Objective - C代码交互使用,方便在苹果平台的开发。
(二)主要应用领域
iOS应用开发:是开发iOS应用的主要语言。
macOS应用开发:用于开发苹果Mac电脑上的应用程序。
八、Kotlin
(一)特点
简洁:语法简洁,减少样板代码。
与Java兼容:可以和Java代码无缝集成,可调用Java类库。
函数式编程支持:支持函数式编程特性。
空安全:有良好的空指针处理机制。
(二)主要应用领域
Android开发:逐渐成为Android开发的热门语言。
九、Ruby
(一)特点
简洁优雅:语法简洁,代码编写起来较为轻松。
动态类型:变量类型在运行时确定。
面向对象:一切皆对象的编程思想。
丰富的库和框架:有很多实用的库和框架,如Ruby on Rails用于快速Web开发。
(二)主要应用领域
Web开发:特别是使用Ruby on Rails框架进行高效的Web开发。
脚本编写:可用于编写各种脚本任务。
十、Go
(一)特点
简洁高效:语法简洁,代码编写高效。
并发性好:有强大的并发编程支持,可轻松处理多任务。
编译型语言:编译速度快,生成的可执行文件运行效率高。
内存管理自动:有自动的内存管理机制。
(二)主要应用领域
网络编程:适合编写网络服务、网络工具等。
云计算:在云平台开发中有广泛应用。
分布式系统:构建分布式应用程序。 -
问题2:同上:“程序在计算机内部是如何运行的。”
-
问题2解决方案:同上得出结果
一、程序运行的基础架构:冯诺依曼体系结构
程序运行基于冯诺依曼存储程序式体系结构,该体系结构包含控制器、运算器、存储器、输入设备、输出设备这几个主要部分,其中存储器是程序运行的关键要素2。
(一)存储器的分类
寄存器(CPU内部):用于存放待操作数和结果。寄存器是CPU内部非常小、非常快速的存储部件,其容量有限。例如,32位的CPU每个寄存器一般能存储32位(4个字节)的数据,64位的CPU每个寄存器一般能存储64位(8个字节)的数据。现代CPU内置几十个甚至上百个寄存器,在程序执行过程中有多种重要功能,如完成数学运算、控制循环次数、控制程序执行流程、标记CPU运行状态等。像EIP(ExternInstructionPointer)寄存器的值是下一条指令的地址,CPU执行完当前指令后会根据EIP的值找到下一条指令,改变EIP的值就能改变程序的执行流程;CR3寄存器保存着当前进程页目录的物理地址,切换进程时会改变CR3的值;EBP、ESP寄存器用来指向栈的底部和顶部,函数调用会改变EBP和ESP的值1。
高速缓存(通常在CPU内部):用作数据缓冲区。虽然内存读取速度较快,但与CPU相比仍有很大差距,为避免每次从内存读取数据拖慢CPU运行速度(这会使CPU经常处于等待状态),在CPU内部设置缓存。缓存可将使用频繁的数据暂时读取进来,当需要同一地址上的数据时,可直接从缓存读取而无需再访问内存。不过缓存容量有限,CPU只能从缓存读取部分数据,对于使用不频繁的数据会绕过缓存直接从内存读取,这就涉及到缓存命中率的概念,即能够从缓存中读取就命中,否则就没命中,关于哪些数据保留在缓存有复杂算法1。
内存:是程序运行时存放指令和数据的地方,但不能在内存中直接完成计算功能。例如计算
a
=
b
c
a=b+c,必须将
a
a、
b
b、
c
c都读取到CPU内部才能进行加法运算1。
外存:如硬盘等,用于长期存储数据。
二、指令集与程序运行
(一)指令集的概念
要让CPU工作,必须借助特定的指令,这些指令的集合就是CPU的指令集,是用来计算和控制计算机系统的一套指令。典型的有IntelX86指令集和ARM指令集。不同型号的CPU支持的指令集会有所差异,但绝大部分是相同的2。
(二)指令执行示例
例如
a
d
d
add用于加法运算,
s
u
b
sub用于减法运算,
c
m
p
cmp用于比较两个数的大小。在具体的指令执行中,会把宏观层次的命令转换为满足指令集要求的二进制代码,然后才能在计算机上运行。如汇编语言中的指令
a
d
d
e
a
x
,
p
t
r
[
b
]
addeax,ptr[b]表示把
e
a
x
eax和
p
t
r
[
a
]
ptr[a]中的数值相加,并把结果放在
e
a
x
eax中,但汇编语言还要经过简单转换才能成为CPU指令1。
三、程序运行中的操作系统管理
在程序运行的过程中,操作系统会对程序进行多方面的管理。
内存管理:负责分配和管理程序运行时所需的内存空间。
进程管理:包括进程的创建、调度、切换等操作。例如,进程切换时CR3寄存器的值会改变,因为CR3寄存器保存着当前进程页目录的物理地址1。
线程管理:如果程序是多线程的,操作系统会对线程进行管理,协调线程之间的资源分配和执行顺序等。
四、程序运行中的特殊操作
(一)函数调用
函数调用能提高代码可复用性。在函数调用过程中,会改变如EBP、ESP等寄存器的值,这些寄存器用来指向栈的底部和顶部1。
(二)系统调用
系统调用能让程序员向操作系统发起请求,通过操作系统提供的系统调用(systemcall)接口,程序在运行过程中可以获取操作系统的服务,如读写文件、申请内存等操作
基于ai的学习
我:在学习计算机基础相关知识,请进行苏格拉底式提问
AI: 那你能先告诉我,在你目前学习的计算机基础知识里,你觉得最难以理解的部分是什么呢?
我:目前还没有
AI: 那你能给我讲讲你对计算机硬件组成部分的理解吗?
我:计算机硬件是构成计算机系统的物理部分,它负责执行计算机程序中的指令,处理数据,以及存储和检索信息
AI: 那你能详细说说在这些硬件中,你认为哪个硬件对于计算机整体性能的影响最大呢?
我:cpu
AI: 那你能解释一下为什么你觉得CPU对计算机整体性能的影响最大呢?
我:cpu是计算机的整体控制单元,能协调各部分之间的协调工作
AI: 那你能具体说说CPU是通过哪些方式来协调计算机各部分工作的呢?
我:不会
AI: 那你有没有想过通过查阅哪些资料或者进行哪些实验来弄清楚这个问题呢?
我:请解答我的疑惑
AI: 那我来给你讲讲。CPU通过控制总线来协调各部分工作。它可以向内存发送地址信号,以获取需要处理的数据,这就像是指挥家告诉乐手要演奏哪个音符一样。同时,CPU还能控制输入输出设备,比如告诉硬盘何时读取或写入数据,指挥显卡进行图像的渲染等。而且,CPU内部的指令集也在协调工作中起到关键作用,不同的指令能让CPU对不同的硬件组件发出不同的操作指令,从而让计算机各部分有条不紊地协同工作。那现在你对这个过程是不是有了更清晰的理解呢?
我:是
AI: 那你能再思考一下,CPU的性能指标,比如主频、缓存等,是如何影响它协调各部分工作的效率的呢?
我:cpu的频率决定了它的工作效率,缓存决定了它的处理容量
AI: 那你能进一步解释一下,CPU频率具体是怎样影响它协调各部分工作的效率的呢?
我:CPU频率决定了CPU每秒钟能够执行多少条指令。频率越高,意味着CPU在单位时间内能够完成更多的计算周期,从而更快地执行程序指令。当CPU处理复杂任务时,如大型游戏、高清视频编辑、图形渲染等,高频CPU能够更快地响应用户的操作和计算需求,提高整体工作效率。
AI: 那你能思考一下,在多核心CPU的情况下,频率和核心数之间是如何相互影响来协调计算机各部分工作的呢?
我:通过将任务分给不同的核,完成后统一汇总,提高工作效率
AI: 那你能详细说说,CPU是根据什么标准来把任务分配给不同核心的呢?
我:根据任务的具体细节和核的计算能力
AI: 那你能进一步阐述一下,CPU是如何识别任务的优先性的呢?
我:不会,你来讲讲
AI: 那我来给你讲讲。操作系统的任务调度器会维护一个就绪队列,里面包含了所有准备好被CPU处理的进程。当一个CPU核心空闲时,任务调度器会查看就绪队列中的进程。对于进程的优先级设置,通常有不同的级别,比如高、中、低等。任务调度器会优先选择优先级高的进程分配给空闲的CPU核心。它会根据一些算法来实现这种分配,例如先来先服务算法(FCFS),就是按照进程进入就绪队列的先后顺序分配CPU,但如果结合优先级,高优先级的进程会插队到低优先级进程之前被处理;还有短作业优先算法(SJF),如果高优先级的进程预计执行时间短,就会优先被分配到CPU核心;还有基于优先级的抢占式调度算法,高优先级进程可以抢占正在CPU上运行的低优先级进程的资源。这样,通过这些方式,任务调度器根据进程的优先级设置来安排CPU核心处理任务的顺序。那现在你对这个过程是不是有了更清晰的理解呢?
我:好的,就到这里吧,再做个总结
AI: 好的。我们从你学习计算机基础相关知识开始,针对计算机硬件中的CPU进行了一系列的探讨。
首先,你理解计算机硬件是计算机系统的物理部分,并且认为CPU是对计算机整体性能影响最大的硬件,因为它是计算机的整体控制单元,能协调各部分工作。
然后我们深入探讨了CPU协调各部分工作的方式,包括通过控制总线与内存、输入输出设备交互,以及其内部指令集的作用。
接着讨论了CPU的性能指标,如主频和缓存对协调工作效率的影响,你提到主频决定工作效率,缓存决定处理容量。
在多核心CPU方面,我们谈到任务可分配给不同核心,之后汇总以提高效率,并且任务分配依据任务的性质、需求与优先性等。
最后说到CPU识别任务优先性是通过操作系统的任务调度器和进程的优先级设置,任务调度器根据不同算法,按照进程优先级安排CPU核心处理任务的顺序。
希望通过这些讨论,你对计算机基础中CPU相关知识有了更深入的理解。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 20/20 | 2/2 | 20/20 | |
第二周 | 0/20 | 1/3 | 5/25 |
-
计划学习时间:15小时
-
实际学习时间:5小时
-
改进情况:国庆假期外出游玩后没有额外的精力完成相关作业或任务,以后假期减少活动,合理安排时间。