047-操作系统上下文切换
在操作系统中,上下文切换(Context Switch)指的是将 CPU 从一个进程或线程切换到另一个进程或线程的过程。这一机制使得多任务操作系统可以在多个任务之间来回切换,实现“并发”运行。 1. 上下文切换的目的上下文切换是多任务操作系统的核心特性,使得多个进程或线程可以共享 CPU 时间,从而提升系统资源的利用率和用户的使用体验。通过快速切换,操作系统在表面上呈现出多个程序同时运行的效果(即并发)。 2. 上下文切换的过程上下文切换主要涉及三个步骤: 保存当前任务的上下文:将当前正在执行的任务的状态(称为上下文)保存到它的控制块(PCB 或 TCB)中。上下文信息包括 CPU 寄存器、程序计数器、堆栈指针等,它们表示当前任务的执行状态。 加载新任务的上下文:从新的任务的控制块中读取其保存的上下文信息,恢复到 CPU 寄存器,以便新任务从中断点或挂起位置继续执行。 执行调度策略:操作系统调度器决定下一个要运行的任务。它根据调度算法(例如时间片轮转、优先级调度等)选择下一个任务,并执行上下文恢复。 3....
046-异常和中断的区别
在程序设计和操作系统中,异常和中断都是用来处理异常情况或外部事件的机制,但它们的触发方式、目的以及处理机制有所不同。 异常和中断的区别 1. 触发方式 异常:由程序内部的指令导致。例如除零、非法访问内存、无效的操作码等。异常通常是在指令执行过程中由 CPU 检测并报告给操作系统。 中断:由外部设备或系统事件触发。例如定时器中断、I/O 设备中断、外设请求等。中断信号通常来自硬件,告诉 CPU 有紧急事件需要处理。 2. 目的 异常:主要用于报告和处理程序运行中的错误或意外情况,以便让操作系统或程序决定如何应对。 中断:用于响应硬件事件或定期执行某些任务,比如键盘输入、网络数据到达等,让操作系统能够及时处理硬件请求。 3. 处理机制 异常处理:异常通常会暂停当前指令执行,保存程序状态,并进入异常处理程序。异常处理程序可能会执行错误恢复、进程终止、日志记录等操作。 中断处理:中断信号到达后,CPU 保存当前执行状态并跳转到对应的中断服务程序(ISR)。中断处理程序一般尽量短小高效,快速处理硬件请求后,返回继续执行被中断的程序。 4....
045-operate-system-learning
操作系统是计算机系统的核心软件,负责管理硬件资源、提供系统服务、支持应用程序运行,并协调多任务和多用户之间的交互。 操作系统书籍 《现代操作系统:原理与实现》
044-websocket和http的区别
WebSocket 和 HTTP 是两种不同的通信协议,它们各自有不同的特点和使用场景。以下是它们的主要区别: 连接方式: HTTP:基于请求-响应模型,客户端发送请求,服务器响应后连接关闭。每次通信都需要重新建立连接。 WebSocket:是一种全双工协议,在初始握手阶段通过 HTTP 连接建立。握手完成后,连接会升级为 WebSocket,保持长期连接,支持实时双向通信。 通信模式: HTTP:基于无状态、单向的短连接通信。客户端只能主动向服务器发送请求,服务器只能被动响应。 WebSocket:支持双向通信,允许客户端和服务器之间主动发送和接收数据,适合实时数据更新。 连接保持: HTTP:默认短连接(除非使用 HTTP/1.1 的 keep-alive),在一次请求-响应完成后会断开连接。 WebSocket:连接一旦建立,将一直保持打开状态,直到客户端或服务器主动断开。 数据传输效率: HTTP:每次请求都会发送完整的 HTTP...
043-CMake和MinGW的关系
CMake 和 MinGW 的关系让我为你解释 CMake 和 MinGW 的关系: CMake CMake 是一个跨平台的构建系统生成器 它不直接编译代码,而是生成其他构建系统使用的文件,比如: Windows 上的 Visual Studio 项目文件 Unix 上的 Makefile MinGW 的 Makefile MinGW MinGW (Minimalist GNU for Windows) 是一个编译工具链 包含以下核心组件: gcc (编译器) g++ (C++编译器) mingw32-make (Make 工具) 其他 GNU 工具 它们的关系 配合使用 CMake 生成 Makefile MinGW 的 mingw32-make 读取 Makefile 并调用 gcc/g++ 进行实际的编译 工作流程 1CMakeLists.txt --[CMake生成]--> Makefile --[MinGW执行]--> 可执行文件 实际例子: 12345# 使用 CMake 生成 Makefilecmake -G...
042-network-learning
计算机网络学习资料 计算机网络书籍 《网络是怎样连接的》 网站 图解网络 - 小林 coding
041-c++ learning
自用 c++ 学习资料 c++书籍 《c++ primer 5th》 《Effective c++》 《Effective modern c++》中文 《Google c++ style guide》中文, 英文 《C++ Concurrency in Action》 网站 cppreference 中文, 英文 c++库 boost awesome-cpp 开源 C++ 库- cppreference 工具 header c++在线编译 c++数据类型 c++数据类型转换 博客 c++学习路线 c++那些事-光城 现代 c++教程-changkun 博客园-c++ 常用...
040-c++递归互斥锁、lock_guard和unique_lock
std::recursive_mutex可以在同一个线程中嵌套使用。介绍了 lock_guard 和 mutex 是什么关系, lock_guard 和 unique_lock 的区别 std::recursive_mutex是一种递归锁,它允许同一线程多次加锁而不会导致死锁。在使用普通的std::mutex时,同一线程如果多次尝试加锁会造成死锁;而std::recursive_mutex则不会。它会跟踪当前线程的加锁次数,并在解锁时,只有当解锁次数与加锁次数相同时,锁才会真正释放。 以下是一个简单的示例,展示了如何在同一线程中嵌套使用std::recursive_mutex: 123456789101112131415161718192021222324#include <iostream>#include <mutex>#include <thread>std::recursive_mutex mtx;void recursiveFunction(int count) { if (count <= 0)...
039-linux-mv
以下是关于 mv 命令在不同情况下的用法: 将文件夹移动到另一个文件夹内1. 将文件夹移动到另一个文件夹内假设要将文件夹 source_folder 移动到 destination_folder 内: 1mv source_folder destination_folder/ 这样会将 source_folder 以及其中的所有内容移动到 destination_folder 中。 2. 将文件夹内的文件移动到另一个文件夹假设要将 source_folder 中的所有文件移动到 destination_folder 中: 1mv source_folder/* destination_folder/ 这会将 source_folder 中的所有文件(不包含子文件夹)移动到 destination_folder。 如果希望同时移动子文件夹,可以使用 -r 选项: 1mv source_folder/* destination_folder/ -r 3. 将文件夹覆盖为另一个文件夹如果 destination_folder 已经存在,并希望用 source_folder...