天梯 题解 估值 程序设计

Linux读取文件的简单字符驱动程序

Linux读取文件的简单字符驱动程序 设备驱动程序作为沟通外部硬件与Linux内核的纽带,属于嵌入式开发中不可避免的一环。Linux内核程序的开发和用户空间中开发的不同之处在于两点,一是内核程序由内核进行调用,基本没有一个类似于用户空间程序中的main函数,二是内核代码无法调用很多我们熟知的C语言库 ......
驱动程序 字符 文件 程序 Linux

20211105李宜时信息安全系统设计与实现学习笔记9

信号和信号处理包括信号和中断 1. 信号和中断的基础 定义和概述:解释信号在操作系统中的作用,它们如何与中断相关。 信号类型:列出常见的 UNIX/Linux 信号,例如 SIGINT, SIGTERM, SIGKILL 等。 2. UNIX/Linux 信号示例 实例演示:通过实际示例展示信号如何 ......
20211105 笔记 系统 信息

【2023 #84】 锦城ACM周测 (大二个人赛) 题解

题目难度 \(B<D<E=C<A\) Candy war Question 有 \(N\) 个盒子摆成环形,第 \(i\) 和盒子里面有 \(a_i\) 个糖果,他们开始在 \(1\) 好盒子,然后每个人取一次,可以取\(1\), 或者小于当前盒子内糖果数的一个质数 \(p\), 两个人都取了之后就 ......
个人赛 题解 个人 2023 ACM

信息安全系统设计与实现学习笔记9

学习笔记 9 一、知识点归纳以及自己最有收获的内容 1. 信号和信号处理 进程的概念 一个“进程”是一系列活动,包括从事日常事物的人、在用户模式或内核模式下运行的Unix/Linux进程以及执行机器指令的CPU。 中断 中断可分为三类:来自硬件的中断、来自其他人的中断、自己造成的中断。 人员中断可根 ......
笔记 系统 信息

2023-2024-1 20211319《计算机基础与程序设计》第七周学习总结

2023-2024-1 20211319 《计算机基础与程序设计》第七周学习总结 作业信息 这个作业属于哪个课程 <班级的链接>(如2023-2024-1-计算机基础与程序设计) 这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK ......

树上动态DP状态设计及实现细节

状态设计 由于具有更改操作,我们希望更改后会变的东西可以简单的通过线段树上单点修改来维护。 对于一般的常数层转移 DP,这一点较好处理。但是对于树上 DP,就需要结合重儿子进行设计另一个 \(g\) 数组,表示不含重儿子的 DP 值,就可以结合树剖快速计算。 如这道,各点有不同代价,可覆盖子树所有叶 ......
细节 状态 动态

2023-2024-1 20231417 《计算机基础与程序设计》第七周学习总结

2023-2024-1 20231417 《计算机基础与程序设计》第七周学习总结 作业信息 这个作业属于哪个课程<班级的链接>(https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP) 这个作业要求在哪里 <作业要求的链接>(https://www ......

「题解」P6791 [SNOI2020] 取石子

anti-game 没有用,能取到 \(n-1\) 的必胜,不能取到 \(n-1\) 的必败,所以现在考虑取走最后石子获胜的情况。 对于一个 \(n\) 来说合法的 \(k\) 一定是一个前缀,并且一定是贪心取最小的(留给对方的机会更小),所以启发将每个 \(n\) 最小的合法的 \(k=a_n\) ......
题解 石子 P6791 6791 2020

ABC 328 题解

A 直接模拟即可。 cin>>n>>m; for(int i=1;i<=n;++i){ int x; cin>>x; if(x<=m)sum+=x; } cout<<sum; B 直接模拟即可。 int n,ans; bool chk(int x,int y){ int dig=x%10; x/=1 ......
题解 ABC 328

2023-2024-1 20231403 《计算机基础与程序设计》第七周学习总结

作业信息 这个作业属于哪个课程 <班级的链接>(如2022-2023-1-计算机基础与程序设计) 这个作业要求在哪里 2023-2024-1计算机基础与程序设计第七周作业) 这个作业的目标 自学《计算机科学概论》第8章 《C语言程序设计》第6章 作业正文 https://www.cnblogs.co ......

学期:2023-2024-1 学号:20231426 《计算机基础与程序设计》第七周学习总结

作业信息 这个作业属于哪个课程 2022-2023-1-计算机基础与程序设计 这个作业要求在哪里 2022-2023-1计算机基础与程序设计作业 这个作业的目标 通过教材内容了解数组、子程序与参数 作业正文 https://www.cnblogs.com/hhaxx/p/17826871.html ......

ABC328F 题解

blog。提供一个普通并查集 + 启发式合并做法。 考虑直接维护 \(X_i\)。对于 \(X_u-X_v=w\),分四种情况。 \(X_u,X_v\) 都没被维护过。直接钦定 \(X_u\gets w,X_v\gets0\),以后再改。 \(X_u\) 没被维护过,\(X_v\) 被维护过。显然 ......
题解 328F ABC 328

[题解] CF407E k-d-sequence

k-d-sequence 给你一个长为 \(n\) 的序列,求最长的子区间使得它加入至多 \(k\) 个数后,重排后是公差为 \(d\) 的等差数列。 \(n, k \le 2 \times 10^5\),\(0 \le d \le 10^9\)。 公差是 \(d\) 的等差数列模 \(p\) 的值 ......
题解 k-d-sequence sequence 407E 407

ABC328G 题解

blog。剩下几分钟的时候胡出来了,但是时间不够,痛失 AK /dk。 \(N\le22\),显然状压 DP。\(dp_s\) 表示确定 \(s\) 集合的元素所需的代价(这些元素都放在最前面)。 确定了 \(s\) 后,发现会有 \(\operatorname{popcount}(s)\) 个元素 ......
题解 328G ABC 328

《实战Java高并发程序——第1章 走入并行世界》

基础平台Java虚拟机,虚拟机除了要执行main函数外,还需要做JIT编译和垃圾回收。无论是main函数、JIT编译还是垃圾回收,在虚拟机内部都是一个单独的线程。 多核CPU:将多个独立的计算单元整合到单独的CPU中 如何让多个CPU内核有效并正确地工作也就成了一门技术。如多线程间如何保证线程安全, ......
实战 程序 世界 Java

领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源

Wow: 基于 DDD、EventSourcing 的现代响应式 CQRS 架构微服务开发框架 领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 架构图 事件源 可观测性 OpenAPI (Spring WebFlux 集成) 自动注册 命令  ......
事件 职责 命令 领域

一个操作系统的设计与实现——第14章 文件系统

文件系统是操作系统的一个重要模块。本章将要实现的是文件系统。 14.1 什么是文件系统 文件系统是操作系统用于管理硬盘,并使硬盘更易于使用的模块。 想要管理硬盘,就需要记录硬盘扇区的使用情况,可以使用位图实现这个功能。 想要让硬盘更易于使用,就需要一个非常关键的概念:文件。文件可以将底层的起始扇区号 ......
系统 文件

一个操作系统的设计与实现——第17章 系统交互

操作系统最终是供用户使用的,所以其需要具备与用户交互的能力,交互方式可以是命令行,图形界面,甚至是触摸屏,语音,实体按钮等。本章将要实现的是系统交互。 17.1 外壳程序 我们的操作系统使用的是基于命令行的交互模式。实现此功能的模块被称为外壳(Shell)程序。 事实上,上一章的Test.c已经是一 ......
系统

一个操作系统的设计与实现——第15章 键盘驱动(上)

到目前为止,我们的操作系统只能输出而不能输入。本章将要实现的是键盘驱动,其能让我们的操作系统接收键盘输入。 15.1 键盘驱动的原理 当按下键盘上的键时,发生了什么呢?原来,每当按下键盘上的键,键盘都会发起至少一次键盘中断;每当一个键弹起时,键盘又会发起至少一次键盘中断;如果一直按住一个键不松手,键 ......
键盘 系统

一个操作系统的设计与实现——第16章 键盘驱动(下)

我们的操作系统虽然已经实现了键盘驱动,但其功能仅限于在屏幕上打印输入的字符,任务并不能读取到这些字符。本章将要实现读取键盘输入的系统调用。 16.1 读取键盘输入的原理 想要让任务读取到键盘输入,最简单的方法是构造一个数组,当键盘中断发生时,将键盘输入的字符保存在这个数组中。然而,这个方案有一个无法 ......
键盘 系统

#2023-2024-1 20231424《计算机基础与程序设计》第7周学习总结

2023-2024-1 20231424《计算机基础与程序设计》第7周学习总结 作业信息 作业属于的课程 <班级链接>(2022-2023-1-计算机基础与程序设计) 作业要求 <作业要求链接>(2022-2023-1计算机基础与程序设计第一周作业) 作业目标 《计算机科学概论》第8章和《C语言程序 ......

一个操作系统的设计与实现——第7章 中断

7.1 什么是中断 中断是一种能够随时打断CPU正常工作的机制。这句话看着挺别扭的,CPU工作的好好的,为什么要"随时打断"它?这是因为,CPU需要为诸多外部设备提供服务,以键盘为例,当键盘上的键被按下时,CPU需要对此做出响应和处理,如果不能及时响应,我们会说:"电脑很卡";如果一直都不能响应,我 ......
系统

一个操作系统的设计与实现——第3章 保护模式

实模式下,内存的访问是没有任何限制的,任何程序都能访问和修改任何内存地址,这就导致了实模式下的程序,甚至操作系统自己,都可能自身难保。于是,自8086的下一代产品80286起,保护模式诞生了;进一步的,自80386起,32位保护模式诞生了。 3.1 内存为什么要分段 在学习保护模式之前,需要先讨论一 ......
模式 系统

一个操作系统的设计与实现——第5章 加载内核

一直以来,我们都在使用汇编语言对MBR编程,但对于操作系统这样的复杂程序来说,使用汇编语言是比较困难的。本章将实现操作系统内核的加载与进入。 5.1 读硬盘的实现原理 操作系统存储于硬盘中,现在需要将其读出至内存。想要读硬盘,就需要依次进行以下操作: 设定读取的扇区数 设定起始扇区号 发送读硬盘命令 ......
内核 系统

一个操作系统的设计与实现——第9章 硬盘驱动

操作系统应当具备读写硬盘的能力。因此,本章将要实现的是硬盘驱动。硬盘驱动由两个函数构成:读硬盘函数与写硬盘函数。 9.1 读硬盘 想要读硬盘,就需要提供以下三个信息: 起始扇区号 读取的扇区数 数据存储的地址 需要注意的是:读取的扇区数只能是一个8字节的整数。 由于读硬盘需要使用大量的端口读写指令, ......
硬盘 系统

一个操作系统的设计与实现——第6章 显卡驱动

进入内核以后,应该做些什么呢?本章将实现一个最容易看到效果的模块:显卡驱动。 6.1 什么是驱动 驱动这个词听起来很高大上,但实际上很简单,就是硬件的接口函数。在软件工程中,可以使用接口封装和简化设计,硬件也是一样。例如:想要读硬盘,需要很多指令设定好几个端口,然后等待硬盘就绪,最后才能读硬盘。这一 ......
显卡驱动 显卡 系统

一个操作系统的设计与实现——第8章 内存管理系统

计算机上的任何程序,包括操作系统自己,都需要使用内存。因此,操作系统需要实现内存管理系统,以进行内存的分配和回收。 在我们的操作系统中,内存管理系统由两部分组成:页分配器与页回收器。本章将实现这两个部分。 8.1 从虚拟地址到物理地址 回顾CPU对内存地址的转换过程: 使用段寄存器中的段选择子,在G ......
系统 管理系统 内存

一个操作系统的设计与实现——第10章 任务(一):共享内核

一直以来,我们的操作系统在启动后,运行的都是Kernel.c中的main函数。只运行这一个函数是不够的,操作系统应当有能力加载并运行其他程序。 从本章开始,将使用四章的篇幅讨论操作系统如何加载并运行任务。这里的任务(Task)与进程(Process)是同义词,在操作系统领域中,任务这个词更为常用,请 ......
内核 任务 系统

一个操作系统的设计与实现——第13章 任务(四):任务回收

在前面的两章中,我们的操作系统均不支持任务回收,所以任务不能退出。本章将要实现的是任务回收功能。 13.1 任务回收的原理 如果一个任务位于任务队列中,其就会被运行。所以,如果一个任务的运行已经结束,它就应该从任务队列中删除。 仅仅将任务从任务队列中删除是不够的,这是因为任务还持有一些内存没有释放, ......
任务 系统

一个操作系统的设计与实现——第11章 任务(二):0特权级任务

上一章中,我们的操作系统已经支持内核共享,这为任务的加载和运行做好了准备。 本章将要实现的是0特权级任务的加载与任务切换。 11.1 任务切换的原理 11.1.1 协同式与抢占式任务切换 如果CPU上只运行着Kernel.c的main函数,那么情况非常简单,只需要不断执行下一条指令即可。然而,如果现 ......
任务 特权 系统