自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Adward的博客

不断的学习与记录,不断前行继续探索

  • 博客(75)
  • 收藏
  • 关注

原创 数据结构-位运算总结

191. 位1的个数 - 力扣(LeetCode)有两种写法:1.是把该数不断的去与0x1相与,得到该数的最后一位的值,然后判断他是不是1,再把该数更新一下整体往后移动一位也就是右移一位。return res;当一个数被减1时,它最右边的那个值为1的bit将变为0,同时其右边的所有的bit都会变成1。每次执行x&(x-1)的作用是把ⅹ对应的二进制数中的最后一位1去掉。

2024-08-11 18:53:05 293

原创 初始化二维vector

这里是我遇到的一些对于二维vector容器初始化的一些问题的总结与记录,一共有一下四种情况,随时添加新的方式方法。

2024-08-10 19:26:54 656

原创 操作系统真相还原:Shell进程,fork实现

​fork函数的原型是,父进程返回子进程的PID,子进程返回0。

2024-08-10 16:41:59 1019

原创 数据结构一排序算法

冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序;

2024-08-08 16:04:07 710

原创 操作系统真相还原:获取文件属性

中填充文件结构相关信息,成功时返回 0,失败返回-1。很简单,只有 3 个成员,因此只能获得 3 个属性。用于把信息输出到屏幕,即标准输出。:接受 2 个参数,待获取属性的文件路径。首先判断是不是根目录,然后在调用。命令中调用了大量的系统调用。用于获得文件的属性信息,表示 64 位版本的。调入内存,将属性直接写在。

2024-08-08 15:34:38 161

原创 操作系统真象还原:更改任务的工作目录

无论我们身处任何一级的子目录,都可以“顺藤摸瓜”找到根目录。”获取当前目录的父目录,在父目录中搜索当前目录的目录项,从目录项中获取当前目录名称,然后再向上找父目录的父目录,再从中获得父目录的名称……沿着目录树层层而上,就能构建出当前目录的绝对路径。:把当前工作目录绝对路径写入buf,size是buf的大小,当buf为NULL时,由操作系统分配存储工作路径的空间并返回地址,失败返回NULL。:更改当前工作目录为绝对路径path,成功则返回0,失败返回-1。命令来改变工作目录,咱们要实现类似的功能。

2024-08-07 14:45:33 463

原创 Linux知识点

【代码】Linux知识点。

2024-08-07 14:12:09 1486

原创 计算机网络TCP/UDP知识点

TCP协议是全双工通信,这意味着客户端和服务器端都可以向彼此发送数据,所以关闭连接是双方都需要确认的共同行为。所以客户端收到FIN报⽂,先回⼀个ACK应答报⽂,服务端可能还要数据需要处理和发送,等到其不再发送数据时,才发送FIN报⽂给客户端表⽰同意关闭连接。所以服务端的ACK和FIN⼀般都会分开发送,从⽽⽐三次握⼿导致多了⼀次。假设是三次挥手时,首先释放了A到B方向的连接,此时TCP连接处于半关闭(Half-Close)状态,这时A不能向B发送数据,而B还是可以向A发送数据。

2024-08-07 13:52:46 1509

原创 操作系统真象还原:删除目录

这两个目录项,空目录中只剩下这两个目录项,因此若目录的大小等于 2 个目录项的大小,就表示该目录为空。来删除非空目录,但这是采用递归( recursive)的方式,先删除目录中的文件后再删除目录,因此我们在删除目录的时候先判断目录是否为空,不允许删除非空目录。原理就是我们要删除的。,都会打印类似这样的提示:“删除失败,目录非空”。目录能创建就得能删除, Linux 下删除目录的函数是。当删除目录时,如果目录中有文件或子目录,无论是。判断这个目录是否是非空目录,最后在调用。:接受 1 个参数,待删除的目录。

2024-08-05 10:44:51 553

原创 操作系统真象还原:遍历目录

比如该目录文件下目录项分布:a,空,b,空,c,第一次调用返回a,第二次调用返回b,第三次调用返回c…功能类似,只不过是针对目录的,避免了将目录先关闭再重新打开的繁琐。遍历目录就是读取目录中所有的目录项,在遍历之前必须要先把目录打开,之后还需要把目录关闭。遍历目录的操作中,经常会用到目录回绕的功能,也就是使目录的“游标”,成功后返回目录指针,失败返回 NULL。:接受 1 个参数,目录指针曲,功能是读取目录。读取目录实际上就是读取目录中的目录项。,成功返回 1 个目录项,失败返回。我们也按照此形式实现。

2024-08-05 10:42:44 460

原创 操作系统:上下文

因为有用户空间与内核空间两种工作模式,内核模块运行在内核空间,而用户态应用程序运行在用户空间。运行于进程上下文的内核代码是可抢占的,但中断上下文则会一直运行至结束,不会被抢占。所谓的“进程上下文”,可以看作是用户进程传递给内核的这些参数以及内核要保存的那一整套的变量和寄存器的值和当时的环境等。,用户空间的应用程序就会进入内核空间,由内核代表该进程运行于内核空间,这就涉及到上下文的切换,内核态,运行于进程上下文,内核代表进程运行于内核空间;内核态,运行于中断上下文,内核代表硬件运行于内核空间;

2024-08-04 14:13:26 442

原创 Turbo Boost 禁用

最近在做OAI NR的时候关闭CPU 睿频的时候出了一些问题,这里我把我找到的资料记录一下:禁用 Turbo Boost 的过程可能会因不同的 BIOS/UEFI 和操作系统设置而有所不同。

2024-08-03 16:44:47 1507

原创 操作系统:内存----知识点

虚拟内存简称虚存,是计算机系统内存管理的一种技术。它是相对于物理内存而言的,可以理解为“假的”内存。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),允许程序员编写并运行比实际系统拥有的内存大得多的程序,这使得许多大型软件项目能够在具有有限内存资源的系统上实现。扩大地址空间。无论是段式虚存,还是页式虚存,或是段页式虚存,寻址空间都比实存大。内存保护。每个进程运行在各自的虚拟内存地址空间,互相不能干扰对方。另外,虚存还对特定的内存地址提供写保护,可以防止代码或数据被恶意篡改。

2024-08-03 13:35:04 732

原创 操作系统真象还原:创建目录

创建目录也是由多个步骤完成的,因此创建目录的工作是个事务,具有原子性,即要么所有步骤都完成,要么一个都不做,若其中某个步骤失败,必须将之前完成的操作回漆到之前的状态。来确认待创建的新目录文件在文件系统是否存在,若未找到,也要判断是在最终目录没找到还是某个中间目录不存在,如果是中间目录不存在我们则模拟Linux一样给出提示然后退出;Linux用mkdir函数创建目 录,还有一个同名的 mkdir命令也用来创建目录,原理上都是一回事 ,只是一个是系统调用,另一个是利用此系统调用实现的可执行程序。

2024-08-01 13:23:44 275

原创 操作系统真象还原:实现文件删除功能

记录着这个目录文件的存储位置,我们自然可以以块为单位从磁盘中把父目录文件读取到缓冲区中,然后遍历找到要删除的目录项,删除缓冲区内对应的目录项,然后写回缓冲区数据。是否对应某个打开全局文件结构,如果是,则说明此文件正在被使用,那么就不应该被删除。即可知道占用了哪些块,然后去清除对应的块位图中的位即可,也就是并没有真正删除文件数据;是文件系统的灵魂,删除文件最重要的就是回收文件对应的。清除,再将内存缓冲区中的数据写回磁盘中即可。数组中的索引,然后删除磁盘中的这个。删除这个文件在磁盘中的目录项,调用。

2024-08-01 13:09:52 1085

原创 操作系统真象还原:实现文件读写指针定位功能

将文件描述符转换成指定的全局打开文件结构数组索引,然后switch case对传入的参照物情况进行选择,以对。的参照物是文件尺寸大小,即文件最后一个字节的下一个字节,也就是将读写位置指针设置为文件尺寸+用于根据传入的参照物与偏移,重置传入的文件描述符对应的全局打开文件结构中的。的参照物是文件开始处,也就是将读写位置指针设置为距文件开头偏移。为参照物+偏移量的值,也就是说,文件指针具体的位置不仅取决于。的参照物是当前读写位置,也就是将读写位置指针设置为当前位置+的“参照物",函数功能是设置文件读写指针。

2024-07-30 13:57:48 361

原创 操作系统真象还原:实现文件的读取

流程:1.还是先判断这个读取的数据长度是否超过了文件的可读剩余量,若要读取的字节数超过了文件可读的剩余量,就用剩余量作为待读取的字节数。由于我们操作单位是块,所以对于起始位置,我们要抛弃这个块前面的无用数据,对于结束位置,我们要抛弃这个块后面的无用数据。表示当前操作的文件内容位置,其实就是要读取的内容在文件中的起始位置,比如1个1KB大小的文本文件,,那么就是表示读取当前文件中偏移500字节的这个字符开始的内容。,我们可以确定要读取的内容相对于整个文件的字节偏移量。接受3个参数,读取的文件。

2024-07-30 13:52:31 220

原创 OAI 5G-NR源码架构

在SA模式下,系统读取初始化配置文件,然后将其传送给RRC层,RRC层根据配置文件信息形成RRC message(如:SI系统消息),在5G NR NSA模式下,其接收的配置消息基本上就是MIB以及服务小区从X2接口传来的重配置消息。这里计算了空口帧的许多重要参数信息,包括每帧的时隙数、每子帧的时隙数、每个时隙的符号数、每帧的采样点数、每个时隙的点数、接收/发送天线数、频率范围、帧类型、子载波间隔等信息。对于半动态配置消息以及用户面数据信息的传送,MAC层与PHY层之间使用P7接口,对于上行数据,触发。

2024-07-17 15:38:09 1981 7

原创 基于OAI平台的核心网+gNB+UE的搭建

主要是5G核心网、gNB、UE的一个搭建平台记录。

2024-07-17 15:22:22 1528 3

原创 操作系统真象还原:实现文件写入

写入count字节前,先计算该文件已经占用的块数;5.将写文件所用到的块地址收集到all_blocks,共分为三种情况讨论;本节要实现的 sys_write 是系统调用 write 的内核实现,咱们之前的 write 是个简易版,它是为了临时完成输出打印的功能,不支持文件描述符。如今要让 write 支持文件描述符的话,还要修改下周边与此系统调用相关的内容。先将文件已有数据的最后一块数据读出来并与将要写入的数据在缓冲区中共同拼凑成一个完整的块,然后写入磁盘。,成功则返回写入的字节数,失败则返回-1。

2024-07-16 18:20:17 395

原创 操作系统真象还原:文件的打开与关闭代码实现

函数功能是打开编号为inode_no的inode对应的文件,若成功则返回文件描述符,否则返回-1。3.关于写文件,判断是否有其他进程正在写此文件,我们要保持互斥,读文件则不需要考虑;4.在创建文件进程或线程的。移除内存中的inode,并解除文件结构与inode的关系。:功能是将文件描述符转化为文件表的下标。先是获取一个空的fd描述符;函数就可以处理打开文件的命令了。:将文件正在写标志关闭,调用。,这样就可以顺利的摸到。

2024-07-16 18:18:48 263

原创 操作系统真象还原:创建文件

从查找是否存在,到最后创建之间,要排除以下情况:1、找到了,但是找到的是个目录;4.创建目录项,这里是会标记为普通文件的;加入打开的当前分区的根目录,初始化全局打开文件结构数组。3、在最后一个路径上没找到,但是没有传入表示创建文件的标志;此新增加的文件对应的目录项需要写入该目录的。中的某个扇区,原有扇区可能己满,所以有可能要申请新扇区来存储目录项。新增加的文件必然是存储在某一个目录中,所以该目录的。:函数功能是打开或创建文件成功后,返回文件描述符,即。,这些位于内存中已经被改变的数据要同步到硬盘。

2024-07-15 09:37:27 303

原创 操作系统真象还原:文件操作相关的基础函数

任何有关文件及目录的操作都了不开对inode的操作,因为我们需要通过inode知道文件的存储位置,所以操作文件,总是意味着要找到该文件的inode。涉及:找到一个inode在磁盘中的位置,初始化一个inode,加载该inode到内存中,修改内存中的inode之后同步到磁盘中,从内存中删除一个inode。接下来实现一堆与目录相关的函数,涉及目录打开、关闭,在一个目录文件中寻找指定目录项,初始化一个目录项,将目录项写入父目录中。同时一个目录中存储的是文件或者文件夹,在Linux下它又是一个文件,是文件就有。

2024-07-15 09:35:38 1290

原创 操作系统真象还原:文件描述符简介

inode 是操作系统为自己的文件系统准备的数据结构,它用于文件存储的管理,与用户关系不大,咱们要介绍的文件描述符才是与用户息息相关的。文件描述符即 file descriptor,但凡叫“描述符”的数据结构都用于描述一个对象,文件描述符所描述的对象是文件的操作。

2024-07-14 12:13:57 523

原创 操作系统真象还原:创建文件系统

Linux 内核所在的分区是默认分区,自系统启动后就以该分区为默认分区,该分区的根目录是固定存在的,要想使用其他新分区的话,需要用 mount 命令手动把新的分区挂载到默认分区的某个目录下,这就是上面所说的“拿”出来。尽管其他分区都有自己的根目录,但是默认分区的根目录才是所有分区的父目录,因此挂载分区之后,整个路径树就像一串葡萄。只会存在于内存之中,因为它管理的是对一个目录文件的操作(比如打开一个目录文件,就会在内存中创建这样一个结构体)。遍历所有分区,如果该分区没有文件系统就调用。

2024-07-14 12:11:45 594

原创 操作系统真象还原:文件系统概述

这是一个网站有所有小节的代码实现,同时也包含了Bochs等文件硬盘是低速设备,其读写单位是扇区,为了避免频繁访问硬盘,操作系统不会有了一扇区数据就去读写一次磁盘,往往等数据积攒到“足够大小”时才一次性访问硬盘,这足够大小的数据就是块,硬盘读写单位是扇区,因此一个块是由多个扇区组成的,块大小是扇区大小的整数倍。块是文件系统的读写单位,因此文件至少要占据一个块,当文件体积大于1个块时,文件肯定被拆分成多个块来存储,那么问题来了,这多个块该如何组织到一起?

2024-07-13 14:20:57 1380

原创 动态规划中01背包问题

我们先来理解倒序遍历,从最后一个元素往前看,看到的都是“上一层的元素”然后每遍历到一个元素,就把当前元素赋值成“当前层”的。这样得到的背包,因为每个元素加上的都是上一层的对应的物品value,所以不会重复。倒序的时候左边元素再刷新前都是上一层的数据,但正序就不一样了,正序的时候,左边的元素刚刚刷新过,也就是左边的元素已经是本层的了,意味着什么 这样会导致一个物品反复加好几次。,所以这里可以从左到右来更新背包的容量,因为之前的值都已经好好的存储好了不会在改变。表容量为j的背包,所背的物品价值可以最大为。

2024-07-13 14:15:59 466

原创 isdigit和isalnum

函数可以用于判断一个字符是否为数字,但是要注意它只能检查单个字符,不能判断整个字符串是否为数字。它接受一个字符作为参数,如果这个字符是数字字符(0-9),则返回非零值(通常是1),否则返回0。函数是 C++ 标准库中的一个函数,用于检查字符是否为字母或数字。是 C++ 中的一个函数,用于检查一个字符是否为数字字符。函数对所有大写和小写字母以及数字返回。因为字符 ‘7’ 是数字字符。

2024-07-12 23:11:37 410

原创 reverse函数讲解

是一个非常有用的函数,可以在需要反转容器或数组中的元素顺序时使用。它简单、高效,并且与C++标准库中的其他算法函数一样易于使用。

2024-07-12 23:09:55 1925

原创 cin和getline的区别

cin读取单个单词getline读取一整行。cin跳过空白字符getline保留空白字符。cin用于简单输入getline用于需要读取包含空格的字符串或整行输入的情况。通过理解这两者的区别,可以根据具体需求选择合适的输入方式。

2024-07-12 23:06:51 438

原创 getline函数讲解

这里的参数char* s是输入的字符串变量, n是输入字符串的字符个数(第n个补’\0’),这个类的一个函数,所在的命名空间是std,因此,输入的时候要写成。是string流的函数,只能用于string类型的输入操作。是std流的函数,用于char*类型的输入操作。则会在输入空格时自动结束输入。所代表的字符就终止输入。是用来存字符的变量名,是输入终止条件,即遇到。是结束标志,此处作用与。

2024-07-12 23:05:31 267

原创 C++的priority_queue讲解

优先队列(priority queue)是一种特殊的队列数据结构,其中每个元素都有一个与之相关的优先级。在优先队列中,总是优先处理优先级最高的元素,而不是按照元素插入队列的顺序进行处理。在C++标准库中,是一种容器适配器,提供常用的优先队列功能。通常使用堆数据结构实现,以确保插入和删除操作的高效性。基本定义默认是使用大顶堆的,即队首总是最大的元素//储存int型数据//储存double型数据//储存string型数据priority_queue q;//储存结构体或者类。

2024-07-12 23:03:50 538

原创 stringstream类讲解

和 stringstream,分别用来进行流的输入、输出和输入输出操作。本文以为主,介绍流的输入和输出操作。主要用来进行数据类型转换,由于 使用 string 对象来代替字符数组(snprintf方式),避免了缓冲区溢出的危险;而且,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符号的问题。简单说,相比 C 编程语言库的数据类型转换, 更加安全、自动和直接。

2024-07-12 22:54:01 2007

原创 操作系统真象还原:编写硬盘驱动程序

这是一个网站有所有小节的代码实现,同时也包含了Bochs等文件要实现文件系统,必须先有个磁盘介质,虽然咱们己经有个虚拟磁盘 ,但它只充当了启动盘的作用,仅用来存储内核,是个没有文件系统的裸盘( raw disk)如同我们之前第一章创建主盘时一样,在bochs目录下:创建磁盘然后在输入框依次输入以下,输入一个,按一次回车接下来,我们在文件中,写入这样,bochs虚拟机启动时,就会识别这个磁盘并且自动挂载。:用来查看物理地址处的值,eg:查看0x475处一个字节的值。这个0x475处存储的是主机上安装的硬盘数

2024-07-02 15:26:36 455

原创 操作系统真象还原:进一步完善内核

系统调用就是让用户进程申请操作系统的帮助,让操作系统帮其完成某项工作,也就是相当于用户进程调用了操作系统的功能,因此“系统调用”准确地来说应该被称为“操作系统功能调用”。Linux 系统调用是用中断门来实现的,通过软中断指令 int 来主动发起中断信号Linux 只占用一个中断向量号,即 0x80 ,处理器执行指令 int 0x80 时便触发了系统调用。

2024-07-01 16:05:32 767

原创 操作系统真象还原:用户进程

** @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE。

2024-06-23 16:44:46 1272 1

原创 操作系统真象还原:输入输出系统

键盘是个独立的设备,在它内部有个叫作键盘编码器的芯片,通常是 Intel8048或兼容芯片,它的作用是:每当键盘上发生按键操作,它就向键盘控制器报告哪个键被按下,按键是否弹起。这个键盘控制器可并不在键盘内部,它在主机内部的主板上,通常是 Intel 8042 或兼容芯片,它的作用是接收来自键盘编码器的按键信息,将其解码后保存,然后向中断代理发中断,之后处理器执行相应的中断处理程序读入 8042 处理保存过的按键信息。一个键的状态要么是按下,要么是弹起,因此一个键便有两个编码,按键被按下时的编码叫通码。

2024-06-19 20:56:11 973

原创 操作系统真象还原:线程

我们软件中所做的任务切换,本质上就是改变了处理器中程序计数器的指向,即改变了处理器的“执行流”。

2024-06-19 14:50:38 1037

原创 操作系统真象还原:内存管理系统

make 给咱们提供了方法,可以在命令之前加个字符’@’,这样就不会输出命令本身信息了变量定义的格式:变量名=值(字符串),多个值之间用空格分开。make 程序在处理时会用空格将值打散,然后遍历每一个值。另外,值仅支持字符串类型,即使是数字也被当作字符串来处理。变量引用的格式:$(变量名)。这样,每次引用变量时,变量名就会被其值(宇符串)替换。/*

2024-06-10 19:16:53 1031

原创 操作系统真象还原:中断

为了使所有设备之间的通信井然有序,各通信设备间必须有统一的节奏,不能各干各的,这个节奏就称为定时或时钟。时钟只是一种时间的度量,只是一种节奏。计算机中的时钟,大致上可分为两大类:内部时钟和外部时钟。内部时钟是指处理器中内部元件,如运算器、控制器的工作时序,主要用于控制、同步内部工作过程的步调。内部时钟是由晶体振荡器产生的,简称晶振,它位于主板上,其频率经过分频之后就是主板的外频,处理器和南北桥之间的通信就基于外频。Intel 处理器将此外频乘以某个倍数(也称为倍频)之后便称为主频。

2024-06-10 16:41:11 1171

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除