深入理解计算机系统
文章平均质量分 67
StevenOnesir
这个作者很懒,什么都没留下…
展开
-
<Operating System Concepts> 第九版 第一章习题答案(原创)
计算机系统习题分析原创 2022-07-12 22:56:27 · 1720 阅读 · 1 评论 -
并发编程思考--多路复用技术
本文默认读者具有Csapp与Os的所有基础知识。首先是并发编程的意义:这是显而易见的,例如在服务器端利用并发编程技术,可以同时为多个客户端提供服务,主程序只需要接收客户端的请求并为其分配子进程(粗浅运用)。这里我们简单略过。接下来我们讨论基于进程的并发编程:就像我们上面举的例子一样,我们完全可以用主程序接收信号,并为每一个特定的事项分配一个子进程去专门处理。这里要注意的是需要包括一个SIGCHLD处理程序,并且处理程序中最好使用:while(waitpid(-1,0,WNOHANG)>0);的原创 2021-01-07 04:56:43 · 263 阅读 · 0 评论 -
ECF中的信号、并发与跳转详解 (二)
Linux提供阻塞信号的隐式和显式机制。对于隐式机制,内核默认阻塞任何当前处理程序正在处理信号类型的待处理信号。对于显式机制,程序可以通过sigprocmask函数与它的辅助函数,明确地阻塞与解除阻塞选定的信号。#include <signal.h>int sigprocmask(int how,const sigset_t *set,sigset_t *oldset);int sigemptyset(sigset_t *set);int sigfillset(sigset_t *原创 2021-01-06 22:03:32 · 170 阅读 · 0 评论 -
ECF中的信号、并发与跳转详解
本节开始我们将针对信号展开讨论在之前的学习中,我们已经看到了硬件与软件通过合作来提供基本的异常机制,也看到了操作系统通过利用异常来支持进程的上下文切换的异常控制流形式。本节我们将讨论一种软件形式的高层异常,即linux 信号。每个信号其实都可以理解为一条消息,用于通知进程系统中发生了什么事。底层的硬件异常是由内核异常处理程序去处理的,正常情况下这种处理对于用户进程来讲是不可见的。但信号会直接通知用户进程发生了某些异常。如进程试图除以零,内核将发送给它一个SIGFPE信号;如果执行非法指令,将收到SI原创 2021-01-01 20:52:05 · 323 阅读 · 0 评论 -
ECF 计算机系统异常控制流详解 (一)
首先讨论本地跳转与非本地跳转本地跳转:以C语言为例,从某个函数通过goto跳转函数跳转到另一个函数执行,叫做本地跳转。非本地跳转:例如使用setjmp()与longjmp()函数进行异常控制,保存当前函数状态并跳转到另一进行函数的过程,叫做非本地跳转。非本地跳转是C语言中处理异常时更为优美的方式。然后我们来理解一下异常异常实际上就是异常控制流的一部分,由计算机硬件与计算机系统共同负责完成。即控制流中的突变,用来响应处理器状态的某些变化。控制流我们该怎么理解呢?程序计数器负责存储下一个指令的地址原创 2020-12-30 08:28:38 · 984 阅读 · 0 评论 -
《深入理解计算机系统原理》学习笔记与习题答案(二)
这篇文章是《深入理解计算机系统原理》的第二部分,主要讲解第二章2.2节 整数表示。2.2 整数表示本节主要介绍了两种方式,分别在计算机中表示非负数与所有整数。(友情提示:看书时可先略过图2.8)2.2.1 整型数据类型这一节给出了两张图,我们可以从中得到两个重要特性:1、正数与负数的表示范围不是对称的,负数范围的绝对值比正数大1。这是因为0的表示算在了正数里。2、int默认可以用2个bytes表示,这与16位机器相同。int_32t是4bytes,int_64t是8bytes,但实际上int在原创 2020-11-25 17:41:36 · 1266 阅读 · 0 评论 -
《深入理解计算机系统原理》学习笔记与习题答案(一)
第一章计算机系统漫游比较基础广泛,后面有空补上。第二章 信息的表示和处理首先需要理解计算机当中的位的概念。位:在二进制数系统中,位记为b,即比特,是最小的存储单位。0/1中每一位是1 bit 。本章中研究三种最重要的数字表示形式:无符号编码(unsigned)补码(two’s-complement)浮点数(floating-point)先有个粗略印象:无符号编码实际上就是传统的进制转换表示方式,由于只表示正数,正常转换十进制数到二进制数就是无符号编码;补码用于表示有符号数(如负数),而原创 2020-11-25 00:25:41 · 2765 阅读 · 0 评论