南京大学-操作系统-概论-应用视角
操作系统的三种视角
应用程序视角: 操作系统是一组API和对象,提供了程序运行的便利。它抽象了硬件细节,使得应用程序能够专注于业务逻辑而无需关注底层实现。
硬件视角: 从硬件角度看,操作系统其实就是一个普通的C程序。它直接运行在硬件之上,管理硬件资源并调度任务。
数学视角: 操作系统也可以被看作是一个严格的数学对象,具有明确的状态转移和逻辑关系。本课程将从这三个视角系统地介绍操作系统的核心概念。
亮点总结
操作系统的抽象与程序编译
操作系统的抽象功能: 操作系统通过API抽象底层硬件细节,为应用程序提供了一个简洁而强大的运行环境。通过深入学习程序和编译器的工作原理,可以更好地理解操作系统的作用和程序运行过程。
编译与链接: 静态链接和二进制文件分析工具有助于理解程序运行的复杂性。编译器选项和程序分析工具则可以深入揭示程序的编译过程以及执行环境的选择原因。
深入理解编译器与系统行为
程序员的作用: 在计算机系统中没有魔法,一切行为都是由程序员精心设计的,包括GCC编译器的行为。通过调试和实验,能够深入理解计算机系统的工作原理。
调试工具的应用: 使用verbose选项查看编译日 ...
南京大学-操作系统-概述-总起
本课程旨在通过从历史发展到现代技术的探讨,帮助学生深入理解操作系统的基本原理和功能。课程内容包括软硬件资源管理、程序执行等核心概念的讲解,并通过自主学习和实践操作等方式,培养学生的系统思维和解决问题的能力。
课程内容与评分方式
课程视频首先介绍了操作系统课程的概述,包括为什么学习操作系统以及课程的内容安排。教师分享了自身的教学背景和课程教材,详细说明了课程的评分方式和实验要求。课程的主题分为“为什么学”、“学什么”以及“如何学”三个部分,为学生提供了清晰的学习框架。教材推荐了开源书籍《Operating Systems: Three Easy Pieces》,并提供了学习建议和考试评分的相关细节。
学习操作系统的意义
理解操作系统的重要性在于透过学科发展历史,探讨各类技术和概念的产生原因。通过学习操作系统,可以更好地理解计算机科学基础的形成逻辑,这是建立在数学基础之上的。了解各种概念的历史背景和演变过程,能加深对技术发展和学科历史的理解。
数学概念与技术创新
学习数学概念的关键在于理解其基本动机和解决问题的方法,而不仅仅是简单的应用。操作系统的学习不仅仅为了掌握理论知识,更是为了应对现 ...
南京大学-操作系统-写在前面
在做项目的时候感觉有一些计算机系统底层的知识欠缺,所以打算补一补操作系统的知识,在知乎上检索后发现南京大学蒋炎岩老师开始的操作系统课程讲的非常好,于是打算跟着学习。
b站链接:https://www.bilibili.com/video/BV1HN41197Ko/
老师是直接现场coding,直接调虚拟机进行debug,结合知识点进行讲解和展示,第一次体验到这种上课模式。感觉挺有趣的,就像在听脱口秀一样。
MIT-算法导论-写在后面
daf9e1003c8b639b6138b233a833233965d135783ea2701cf91ced3bed71d1bb7964e998be7bc3a692d9d6bebf4176329edf02e57f3edeccd9b6f9ba5ddb7821c399c902a70ed6166c96cabdd680f045d8e81dec759ecdb142e8bf0ea4620dfbaee4362c2138add1b428484efd15b5c684d323508a98236f2f5adc301e5f176bcd38fddf7db3395cd268d3f8d0d479709cfa08398ba732b7664614730d255fa77ef2faa013d6205e27b0a8b2d7d72e5560431fdc12324e4401910818d9cacdd7cfaf0f19671dd9f54b27fe70318266f90173c94bead1de654981ba6f4aafdd895706be34483ca652978bb14b96ff28afc0a236482f50bb134 ...
CSAPP-【第十二章】并行编程-补充阅读与总结【转载】
补充阅读材料:
https://fengmuzi2003.gitbook.io/csapp3e/di-12-zhang-bing-fa-bian-cheng
学习目标
理解并行的几个层次:进程、事件、线程
了解 Posix 标准
了解同步问题产生的背景,以及信号量的工作机制
了解『生产者-消费者问题』和『读者-写者问题』
理解线程安全和一致性问题
并行方法
首先一定要清楚地意识到:『并行编程不简单』!最主要的原因恐怕就是我们自己的大脑,人脑实际上是一个非常精妙的系统,所采取的并行策略是一明一暗两条线,但是对于明线来说,是线性的,于是就和计算机中并行的概念冲突了。另外时间这个概念也是线性的,这就导致了想要处理好并行程序可能出现的各种问题几乎是不可能的(或者常常要出错)。
常见的错误有仨:竞争条件[2]、死锁[3]和活锁[4],尤其是在现在的多核处理器架构中,更容易出现这类并行问题。
我们前面实现的服务器,一次只能处理一个请求,只有当前的请求处理完了,才能继续处理下一个。
这里具体讲解一下:Client 1 向 Server 发送连接请求(connect),Server 接受(acc ...
CSAPP-【第十一章】网络-补充阅读与总结【转载】
补充阅读材料:
https://fengmuzi2003.gitbook.io/csapp3e/di-11-zhang-wang-luo-bian-cheng
学习目标
了解网络的基本架构
了解常见的网络协议
掌握基本的网络相关编程技巧
学会编写 web 服务器
网络架构
计算机网络的知识可谓是非常『保值』的,因为这么多基础设备还在运行着,基本机制在短时间内很难改变,关于网络的相关的讲解还有参考链接[1][2],我觉得也非常不错,大家感兴趣可以看看。
客户端-服务器模型是网络应用最广泛使用的模型,客户端进程发送请求给服务器进程,服务器进程获取所需资源并响应客户端进程的请求,客户端进程收到响应后展示给用户。网络相关的处理,都是通过网络适配器来完成的,具体在硬件上为(右下角):
根据网络的应用范围和架构层级,可以分成三个部分:
SAN - System Area Network
Switched Ethernet, Quadrics QSW, …
LAN - Local Area Network
Ethernet, …
WAN - Wide Area Network
...
CSAPP-【第十章】系统级IO-补充阅读与总结【转载】
补充阅读材料:
https://fengmuzi2003.gitbook.io/csapp3e/di-10-zhang-xi-tong-ji-io
学习目标
理解 Unix I/O 的设计与应用
了解不同的文件类型
理解文件描述符(file descriptor)及在读写中的应用
了解元数据的相关概念及访问方法
理解输入输出重定向的实现机制
简单了解 C 标准库中的标准 I/O 函数
知道如何根据不同场景选择对应的 I/O 方式
Unix I/O
在 Linux 中,文件实际上可以看做是字节的序列。更有意思的是,所有的 I/O 设备也是用文件来表示的,比如:
./dev/sda2 (/usr 磁盘分区)
/dev/tty2 (终端)
甚至连内核也是用文件来表示的:
/boot/vmlinuz-3.13.0-55-generic (内核镜像)
/proc (内核数据结构)
因为 I/O 设备也是文件,所以内核可以利用称为 Unix I/O 的简单接口来处理输入输出,比如使用 open() 和 close() 来打开和关闭文件,使用 read() 和 write() 来读写文件 ...
CSAPP-【第九章】虚拟内存-补充阅读与总结【转载】
补充阅读材料:
https://fengmuzi2003.gitbook.io/csapp3e/dixzhang-xu-ni-nei-cun
学习目标
了解物理地址和虚拟地址的区别
理解虚拟内存在缓存、内存管理与保护中所扮演的角色
掌握虚拟内存到物理内存的翻译机制
理解现代计算机系统中虚拟内存的应用
理解动态内存分配的基本概念
区别内部碎片与外部碎片
掌握管理动态内存分配的三种方法
了解垃圾回收的基本原理
了解内存使用中常见的错误
这一讲的内容,跟之前介绍的缓存系统有异曲同工之妙,唯一的差别是,因为涉及的概念和横跨的系统层级增多,难度更大了。如果遇到不明白的地方,一定要结合原书进行细致阅读理解。
从物理内存到虚拟内存
物理地址一般应用在简单的嵌入式微控制器中(汽车、电梯、电子相框等),因为应用的范围有严格的限制,不需要在内存管理中引入过多的复杂度。
但是对于计算机(以及其他智能设备)来说,虚拟地址则是必不可少的,通过 MMU(Memory management unit)把虚拟地址(Virtual Address, VA)转换为物理地址(Physical Address, PA), ...
CSAPP-【第八章】异常流控制-补充阅读与总结【转载】
补充阅读材料:
https://fengmuzi2003.gitbook.io/csapp3e/di-08-zhang-yi-chang-kong-zhi-liu
学习目标
了解异步异常与同步异常,以及异常控制流与平时的逻辑控制流的差异
理解进程的工作机制,如何通过异常来进行进程切换
理解 Linux 的进程控制机制,掌握 fork 的基本用法
了解信号的基本原理以及如何处理信号
掌握如何避免进程竞争的方法
了解非本地跳转的概念和意义
前面提到过,进程可能是计算机系统中最伟大的抽象。进程这个概念背后,其实隐藏着一整套系统级机制,从进程切换、用户态与内核态的转换到系统实时响应各种事件,都离不开一个相当熟悉又陌生的概念——异常。在这个基础上,我们会一起来看看,操作系统到底是如何工作的,为什么可以同时执行不同的程序,具体又是通过什么机制来管理这一切的呢?这一讲我们就来看看这之中的奥秘。
异常控制流
从开机到关机,处理器做的工作其实很简单,就是不断读取并执行指令,每次执行一条,整个指令执行的序列,称为处理器的控制流。到目前为止,我们已经学过了两种改变控制流的方式:
跳转和分支
调用和返回 ...
CSAPP-【第七章】链接-补充阅读与总结【转载】
补充阅读材料:
https://fengmuzi2003.gitbook.io/csapp3e/di-07-zhang-lian-jie
学习目标
理解从源代码转换到计算机可执行的二进制代码之间需要经过的处理
理解编译过程
理解链接过程,尤其是程序的组织部分
理解库的使用方式
理解 Library Interpostion 的机制及几种不同的类型
使用集成开发环境(IDE)很方便,但是在『执行』的按钮背后,其实发生了太多太多的事情。当然,作为初学者,一开始避开过多的复杂专注于学习编写代码无可厚非,但是该学的永远逃不掉,不了解自己的代码是如何一步步成为计算机课执行的程序的,就很难在遇到各种疑难杂症的时候快速定位问题所在。另外,无论是编译器还是链接器,都可以通过不同的参数进行各种定制,如果不搞清楚,恐怕只能永远依赖 IDE 了。IDE 很好,但任何东西都不能过分依赖,真正合理的应该是庖丁解牛后,挑选最适合自己的。
编译
C 语言代码最终成为机器可执行的程序,会像流水线上的产品一样接受各项处理:
预处理器:将 C 语言代码(da.c)转化成 da.i 文件(gcc –E),对应于预处理 ...