NJU_OS_0x1
NJU OS 2024 南京大学《操作系统:设计与实现》一些好词佳句 Life is short, you need Python! linux知识 echo $status 打印程序返回值 可以通过管道将输出传递给less命令查看输出,同时,可以通过2>&1 |将标准错误输出也输出到less 可以通过strace -f可以记录系统调用和子进程,甚至可以追踪他自己! QEMU, A fast and portable dynamic translator make -nB显示 Makefile 文件中指定的命令的执行情况 可以通过mount挂载文件 gcc参数-Wl,--verbose可以详细展示编译过程,-I指定头文字路径 vim - 打开一个新的 Vim 编辑器实例,并将其标准输入设置为来自终端的输入,使用管道符号可以很方便编辑程序的输出。 sed...
51单片机学习0x2
0x2LED点阵屏 LED点阵屏的结构类似于数码管,只不过是数码管把每一列的像素以“8”字型排列而已 LED点阵屏与数码管一样,有共阴和共阳两种接法,不同的接法对应的电路结构不同 LED点阵屏需要进行逐行或逐列扫描,才能使所有LED同时显示 LED点阵屏分类 按颜色:单色、双色(可显示三种颜色)、全彩 按像素:8-8、16-16等 74HC595 74HC595是串行输入并行输出的移位寄存器,可用3根线输入串行数据,8根线输出并行数据,多片级联后,可输出16位、24位、32位等,常用于IO口扩展。 相当于一把手枪,SER填入子弹,SERCLK控制子弹装填(移位),多余的子弹从QH'口溢出,RCLK清空弹夹。同时,还可以将多个74HC595串联,拓展IO口。 要注意J24模块GND端,用文字取模软件生成代码 ...
csapp第十章——系统级IO
系统级I/O输入与输出 (I/O) 是在主存和外部设备(例如磁盘驱动器、终端和网络)之间复制数据的过程。 UNIX I/O 所有的设备(例如网络、磁盘和终端)都被模型化为文件,而所有的输入和输出都被当作对相应文件的读和写来执行。 打开文件。一个应用程序通过要求内核打开相应的文件,来宣告它想要访问一个设备。内核返回一个小的非负整数,叫做描述符,它在后续对此文件的所有操作中标识这个文件。内核记录有关这个打开文件的所有信息。应用程序只需记住这个描述符。 Linux shell 创建的每个进程开始时都有三个打开的文件: 12345/* /usr/include/unisted.h */#define STDIN_FILENO 0 /* Standard input. */#define STDOUT_FILENO 1 /* Standard output. */#define STDERR_FILENO 2 /* Standard error output. ...
csapp第九章——虚拟内存
虚拟内存虚拟内存提供了三个重要的能力: 它将主存看成是 个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效地使用了主存 它为每个进程提供了一致的地址空间,从而简化了内存管理。 它保护了每个进程的地址空间不被其他进程破坏 物理和虚拟内存将虚拟地址转换为物理地址的任务叫做地址翻译 (address translation)。 地址翻译需要 CPU 硬件和操作系统之间的紧密合作 CPU 芯片上叫做内存管理单元(Memory Management Unit, MMU) 的专用硬件,利用存放在主存中的查询表来动态翻译虚拟地址,该表的内容由操作系统管理。 地址空间地址空间 (address space) 个非负整数地址的有序集合: 一个地址空间的大小是由表示最大地址所需要的位数来描述的。 虚拟地址空间: 一个包含 N=2**n个地址的虚拟地址空间就叫做一个n位地址空间,现代系统通常支持 32 位或者 64 位虚拟地址空间。 物理地址空间:对应于系统中物理内存的M个字节。 虚拟内存作为缓存的工具VM...
stm32单片机0x1
stm32STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器 ARM内核 stm32F103C8T6采用Cortex-M3内核,发布于2004年10月。 片上资源/外设 英文缩写 名称 英文缩写 名称 NVIC 嵌套向量中断控制器 CAN CAN通信 SysTick 系统滴答定时器 USB USB通信 RCC 复位和时钟控制 RTC 实时时钟 GPIO 通用IO口 CRC CRC校验 AFIO 复用IO口 PWR 电源控制 EXTI 外部中断 BKP 备份寄存器 TIM 定时器 IWDG 独立看门狗 ADC 模数转换器 WWDG 窗口看门狗 DMA 直接内存访问 DAC 数模转换器 USART 同步/异步串口通信 SDIO SD卡接口 I2C I2C通信 FSMC 可变静态存储控制器 SPI SPI通信 USB...
csapp第八章——异常控制流
[TOC] 异常控制流现代系统通过使控制流发生突变来对系统状态的变化做出反应 。一般而言 ,我们把这些突变称为异常控制流 (Exceptional Control Flow, ECF) 。 异常异常是异常控制流的一种形式,它一部分由硬件实现,一部分由操作系统实现。 异常 (exception) 就是控制流中的突变,用来响应处理器状态中的某些变化。 当处理器检测到有事件发生时,它就会通过一张叫做异常表 (exception table)的跳转表,进行一个间接过程调用(异常),到一个专门设计用来处理这类事件的操作系统子程序(异常处理程序 (exception handler)) 。 异常处理 异常处理程序运行在内核模式下,这意味它们对所有的系统资源都有完全的访问权限。 异常的类别 同步异步表示的结果的获取方式是主动获取还是被动接收;阻塞非阻塞表示的是获取这个动作是否可以立即返回不用等待。 中断中断是异步发生的, 是来自处理器外部的 I/0 设备的信号的结果。例如定时器计时结束后会向处理器发送一个中断。 陷阱和系统调用陷阱是有意的异常,是执行一条指令的结果...
51单片机学习0x1
江科大51单片机学习笔记 单片机 单片机不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机。 命名规则: 51单片机 51单片机是对所有兼容Intel8031指令系统的单片机的统称,这一系列的单片机的始祖是Intel的8031单片机,后来随着flash...
csapp第六章——存储器层次结构
存储器层次结构计算机技术的成功很大程度上源自于存储技术的巨大进步 。 随机访问存储器静态RAM 由于 SRAM 存储器单元的双稳态特性,只要有电,它就会永远地保持它的值。 动态RAMDRAM 将每个位存储为对每个电容的充电。与 SRAM 不同, DRAM 存储器单元对干扰非常敏感 。 传统的DRAMDRAM 芯片中的单元(位)被分成d 个超单元 (supercell) , 每个超单元都个DRAM单元组成。 d*w 的DRAM 总共存储了d w位信息。 图示为168 DRAM 芯片的组织,有 d=l6 个超单元,每个超单元有 w=8 位, r=4 行,c=4 。 将 DRAM 组织成二维阵列而不是线性数组的一个原因是降低芯片上地址引脚的数量。 二维阵列组织的缺点是必须分两步发送地址,这增加了访问时间。 内存模块DRAM 芯片封装在内存模块 (memory module) 中,它插到主板的扩展槽上 。 内存控制器将超单元地址 发送到内存模块,然后内存模块再广播到每个 DRAM 。作为响应,每个DRAM...
csapp第七章——链接
链接链接 (linking) 是将各种代码和数据片段收集并组合成为一个单一文件的过程,这个文件可被加载(复制)到内存并执行 。 链接可以执行于编译时 (compile time), 也就是在源代码被翻译成机器代码时; 也可以执行与加载时 (load time), 也就是在程序被加载器 (loader) 加载到内存并执行时; 甚至执行于运行时 (run time), 也就是由应用程序来执行。 编译器驱动程序12345678910111213141516171819202122232425/* main.c *//* $begin main */int sum(int *a, int n);int array[2] = {1, 2};int main(){ int val = sum(array, 2); return val;}/* $end main *//* sum.c *//* $begin sum */int sum(int *a, int n){ int i, s = 0; for (i...
csapp第五章——优化程序性能
优化程序性能 第一,我们必须选择一组适当的算法和数据结构。 第二,我们必须编写出编译器能够有效优化以转换成高效可执行代码的源代码。 为什么我们需要优化程序,现代编译器不是具有很强的优化能力吗? ans:因为编译器只进行安全的优化,消除可能出现的异常的运行时行为。意味着我们需要写出适合编译器优化的代码,优化程序性能。 内存别名使用 两个指针可能指向同一个内存位置的情况称为内存别名使用 (memory aliasing) 12345678910void twiddlel(long *Xp, long *yp) { *XP += *yp; *XP += *yp; } void twiddle2(long *XP, long *yp) { *XP += 2* *yp; } 乍一看两个函数好像没有区别,但是当*XP与*YP指向同一内存时。twiddle1变为原来的四倍,twiddle2变为原来的三倍。改变了程序的行为。 ...