- 博客(37)
- 收藏
- 关注
原创 2、Docker内搭建Linux kernel调试环境
搭建Linux远程可视化内核的初衷是为了学习Linux的网络模块,但是本身是Java开发对C语言和Linux不太熟悉,用了两个周末的时间借鉴各位大神的文章才在M1的Mac下把环境搭起来,这里对自己环境的配置做个记录,防止后期再次需要搭建时忘记。
2023-03-26 18:21:00 1515
原创 1、Docker搭建Linux环境
先挂vpn执行apt-update的命令是为了安装gnupg、gnupg1、gnupg2,这三个是最后安装证书时候需要的,是为后面更换国内镜像源做准备。Docker刚安装的ubuntu系统无法通过apt-get命令获取软件,必须先执行update命令,执行这一步可能需要vpn环境连接国外服务器。
2023-03-20 22:48:44 283
原创 (1)Docker环境下安装Clickhouse
我这里设置了~/Devlopment/DockerSoft/clickhouse-server1作为Clickhouse程序在Linux运行下虚拟机中/var/lib/clickhouse的挂载目录,设置这个东西的主要目的是为了文件同步。Docker是一种轻量级的虚拟机,且在官网有镜像,通过安装指定软件的镜像,就可以将该软件的所有依赖一次性安装到虚拟机环境中,省去了我们自己安装虚拟机环境、相关依赖的麻烦。Docker官网:https://www.docker.com/默认用户名:Default。
2023-02-12 22:41:12 1349
原创 WebService服务开发
wsdl:types>:包括函数名,入参及返回值,包括子标签、:主要包括一个类对外提供的方法接口,包括子标签:函数名及返回值名称(在函数名基础上+Response):一个operation子标签代表接口类中的一个方法。:webservice服务器地址(URL)2、spring容器配置。
2022-11-11 00:08:12 1264
原创 Activity基础知识
目的Activity通过调用finish()方法,结束当前界面并返回到上一界面,上一界面就可以通过重写onActivityResult方法来接受上一界面的数据,requestCode可以区分是由上一个界面的哪个方法返回到的当前界面,而resultCode可以用来区分是由上一个界面正常返回或者异常返回。在同一个任务栈中,如果要启动的目标Activity已经在栈中,则会复用该Activity,并调用其onNewIntent()方法,并且该Activity上面的Activity会被清除;
2022-11-07 00:29:30 182
原创 Elasticsearch文档查询详解
查询索引中tags中包含男、技术关键词的文档,会检索出包含男关键词、技术关键词、以及两个都包含的文档,包含越多的查询排名越靠前。如果不想要文档中的所有字段值的话可以通过_source字段来筛选出想要的值。term和match关键字的区别在于是否将查询的字段值做拆分,以上面的GET查询为例。查询索引中name匹配java的所有文档,并高亮显示查询的name字段。查询索引中name匹配java的文档中并且age值小于10的所有文档。查询索引中name匹配java而且age为23的文档。关键字must_not。.
2022-08-14 18:44:16 1348
原创 Dubbo3基础配置安装及整合Springboot
Zookeeper3.5.4官方下载地址:https://archive.apache.org/dist/zookeeper/zookeeper-3.5.4-beta/dubbo-admin安装详细:https://github.com/apache/dubbo-admin/blob/develop/README_ZH.md。admin作为dubbo的监控服务可以观察服务消费方和提供方的情况,需要配置zookeeper服务器的地址。...
2022-08-04 00:19:11 1599
原创 Elasticsearch基本操作
方式一(整体更新)这种方式会把文档中其他数据删除,只留下本次提交的数据。方式二(局部更新)这种方式只修改文档中本次提交的数据,不改变其他数据。
2022-08-02 07:59:10 202
原创 Elasticsearch核心概念
对外部的用户来说,我们只需要跟索引进行交互而无需关心数据会存储到哪个分片上,而分片是索引内部的概念,索引的所有数据会分布在这多个分片上。ES中文档相当于关系型数据库中表中的一行行数据,不同之处在于ES中文档是存在于索引(index)中的,相同之处在于都以一行一行的形式来展示数据库中存储的数据。Es中的类型对应于关系型数据库中的表的概念,即相当于约束了数据中有哪些字段,字段的数据类型是什么。ES中Type的映射关系相当于关系型数据库中某个列和该列的类型关系的映射关系。...
2022-07-31 23:06:23 335
原创 Elasticsearch及可视化工具安装使用
Es-head默认在本地的localhost9100端口启动,而Es默认在本地的localhost9200端口启动,初始情况下Es-head连接localhost9200是连接不到的,因为存在跨域问题。官方github地址https//www.elastic.co/cn/elasticsearch/官网地址https//www.elastic.co/cn/elasticsearch/官网地址https//www.elastic.co/cn/kibana/...
2022-07-31 10:30:40 846
原创 flink水位线
自定义水位线策略实际就是重写的和}};//观察到的最大时间privateLongdelayTime=5000L;//延迟时间@OverridepublicvoidonEvent(Eventevent,longeventTimestamp,WatermarkOutputoutput){
2022-07-27 15:31:25 629
原创 Spring整合SpringMVC
在SSM项目中,我们需要手动整合Spring和SpringMVC。下面给出applicationContext.xml以及springmvc.xml,前者作为父容器的配置文件,主要负责除controller组件外的其他组件的扫描。说的更透彻一点,Spring整合SpringMVC其实就是先创建一个Spring容器存放到tomcat为项目创建的context域中,然后再在初始化DispatcherServlet的时候把该容器设置为DispatcherServlet内部的Spring容器的父容器。......
2022-07-18 15:34:10 1600
原创 SpringMVC异常处理流程总结
通过@ControllerAdvice+@Exception的方式便可以指定在请求处理的整个流程中如果出现了@ExceptionHandler注解中指定的这些异常,便可以通过该@ExceptionHandler所标注的方法来处理该类异常,该类中的方法同常规的Controller中的方法一致,如果返回String便会找到相对应的页面进行渲染,如果类上标注了@RestControllerAdvice返回类型为String则会返回JSON字符串。 (2)原理分析 SpringM
2022-07-14 10:58:19 1711 1
原创 操作系统真象还原[14章/十四]-获得文件属性
获得文件属性通过sys_stat函数来实现,本篇也只有这一个函数,这个函数的形式如下: 该函数会通过search_file函数搜索路径为path的文件或目录存不存在,存在的话则将文件或目录的大小信息、文件或目录的inode_no、文件或目录的文件类型存入到结构为stat的buf中,比较简单就不多说了,直接上代码(fs/fs.c以及fs/fs.h中) 实验结果 这里根目录存在file1和dir1两个目录项所以大小是96,而dir1下的sub
2022-07-06 10:39:54 175
原创 操作系统真象还原[14章/十三]-任务的工作目录以及改变工作目录
这节的内容也不多,先梳理一下14.14这节整体的思路我们再写代码。这里所说的任务的工作目录以及改变任务的工作目录的主体是任务,我们也是从这里作为起点开始捋一下思路。 (1)任务就是指线程,每个线程都默认有个初始的工作目录,我们这里设置为根目录。因为线程相关的内容都存放到pcb中,所以我们给pcb增加了字段uint32_t cwd_inode_nr,来记录当前工作目录的inode号 (2)pcb中的cwd_inode_nr需要被赋予初始值0(即根目录的inode编号),这一步是在i
2022-07-06 10:39:32 192
原创 操作系统真象还原[14章/十二]-删除目录
dir_is_empty函数就是判断目录文件中的目录项是否除了'.'和'..'外不存在其他目录项,这个函数代码就1行就不多说了。 主要的函数是dir_remove函数,这个函数其实也很简单,是对之前函数的复用。这里再提一句,删除目录与删除文件的操作是一样的都是分两步,第一先删除父目录中的目录项,第二是回收硬盘数据库以及inode。我们梳理一下这个函数的主要流程: (1)因为要删除的是目录文件,需要保证该目录是空目录,即目录下不能有任何文件或目录,所以磁盘数据块中的内容只能有'.'
2022-07-06 10:39:11 199
原创 操作系统真象还原[14章/十一]-打开/关闭目录以及遍历目录
打开目录其实就是通过dir_open函数打开指定目录的inode,打开inode之前已经说过了就是把硬盘中的inode数组中的inode结构从硬盘中读入到内存中即可。 关闭目录其实就是通过dir_close函数关闭指定目录的inode,关闭inode也提到过就是把内存中的inode结构占用的内存通过sys_free函数释放掉。 这里再把inode_open、inode_close、dir_open、dir_close以及dir、inode的结构再贴一下强化记忆
2022-07-06 10:38:47 317 1
原创 操作系统真象还原[14章/十]-创建目录
之前一直是文件的相关函数,从本篇开始就是目录的相关内容,本篇内容不多只有一个sys_mkdir函数,该函数声明如下:该函数的思路也比较简单: (1)、通过search_file搜索pathname确保pathname满足除最后一层不存在且之前每层均是目录的条件下,程序才可继续向下执行(search_file如果返回了inode_no,说明在某层中找到文件或者在最后一层找到了同名的目录或文件,这种情况不满足条件直接返回-1;若search_file返回-1且search_file的sear
2022-07-06 10:38:12 228
原创 操作系统真象还原[14章/九]-文件删除
文件删除这一块在书中比较长,代码也比较多。不过其实际的原理还是比较简单的,文件在硬盘上就对应着一个inode结构以及为该inode结构所分配的数据块。所以,删除一个文件分以下两步操作进行即可: (一)、在父目录中删除该文件的目录项 (二)、回收该文件在硬盘中占用的数据块(通过硬盘分区中的block_bitmap位图)以及inode结构(通过硬盘分区中的inode_bitmap位图) 第一步对应的是书中第14.10.2节,梳理一下delete_dir_entry函数的
2022-07-06 10:37:38 141
原创 操作系统真象还原[14章/八]-文件指针重定位
本篇只涉及到sys_lseek一个函数,该函数的功能是重新定位file结构中的fd_pos属性,修改文件的读写指针,fd_pos指向的是下一个可读或可写的位置。 其中fd是pcb中的文件描述符(即pcb中fd_table数组的某个下标值),whence包含了SEEK_SET、SEEK_CUR、SEEK_END,offset为偏移字节数。 SEEK_SET:新的读写位置相对于文件开头再增加offset个偏移量 SEEK_CUR:新的读写位置相对于当前位置增加of
2022-07-06 10:36:59 201
原创 操作系统真象还原[14章/七]-文件的写入与读取
本篇主要是针对file_write、sys_write、file_read、sys_read四个函数,此外还会对之前实现的sys_write进行修改,因为之前的sys_write实现时还未创建文件系统,故写入的字符串会被直接打印在屏幕上,没有写入文件的功能。因为涉及到sys_write、write函数的修改,而printf用到了write函数,故还要修改printf函数。下面是本篇的主要函数: 文件写入对应书中14.7节,别看代码很长但是原理很简单,核心就是两步。第一步,将需要用到的数据块lb
2022-07-06 10:36:25 502
原创 操作系统真象还原[14章/六]-文件的打开与关闭
本节对应书中14.6节,文件打开的实现逻辑由file.c中的file_open函数实现,sys_open函数去检查当前路径对应的文件是否存在。文件关闭的后半部分实现逻辑由file.c中的file_close函数实现,前半部分实现逻辑由fs.c中的sys_close函数实现,这个后面会具体细说。 主要讲一下文件打开的整体思路再上代码,写代码时就清晰很多。fs.c/sys_open在文件打开的功能中是来确保路径中的文件是一定存在的且是读或写文件,然后才会调用file_open来打开文件。而file
2022-07-06 10:35:03 612
原创 操作系统真象还原[14章/五]-创建文件
本篇文章对应于书中14.5节的内容,通过利用前面编写的文件操作基础函数实现创建文件的函数file_create以及sys_open函数,两个函数的形式及功能如下: file_create函数的主要工作分为四块,分别是(1)硬盘操作,(2)内存操作,(3)同步操作,(4)回滚操作;接下来就仔细说说这几块内容。 (1)硬盘操作 首先,通过之前的学习我们知道创建文件就是创建inode,所以我们需要通过分区对应的inode_bitmap为新文件分配一个inode,然后我们需
2022-07-04 09:44:20 495
原创 操作系统真象还原[14章/四]-文件描述符以及文件操作基础函数
14.4.3节中的fd/dir.c中的sync_dir_entry函数在将所有数据块读入时没有读入间接块的lba地址 inode只负责记录文件存储的相关信息,而文件结构即file结构则是用于记录与文件操作相关的信息,每次打开一个文件就会产生一个文件结构,多次打开该文件就会为该文件产生多个文件结构,各自文件操作的偏移量分别记录在不同的文件结构中,从而实现了“即使同一个文件被同时多次打开,各自操作的偏移量也互不影响”的灵活性。因为想要操作文件最终必须通过inode找到对应的数据块才可以进行操作,
2022-07-04 09:43:49 227
原创 操作系统真象还原[14章/三]-挂载分区sdb1
本篇比较短小精悍,只针对书上的第14.2.3挂载分区这一小节,在前面我们已经通过fdisk将硬盘划分为了主分区与主扩展分区(主扩展分区又被划分成子扩展分区与逻辑分区),最终我们把主分区以及逻辑分区的信息读入到了ide.c中的partition_list队列中。本节要做的就是将分区的超级块sb,block位图以及inode位图读入到对应的partition的对应属性中,这就称之为分区的挂载,实际上就是将硬盘上分区的相关内容读入到内存的partition数据结构中。再复习一下分区在硬盘中的结构,以及partit
2022-07-04 09:42:43 240
原创 操作系统真象还原[14章/二]-创建文件系统
上一次介绍了每个分区最终的结构图,这张结构图在本篇博客中至关重要,我们要围绕这张图来创建数据结构,并在内存中创建出各分区的各个结构初始的样子,将内存中初始化好的这些数据结构写入到磁盘当中去,这样每个分区就都按上图的样子被初始化好了。说到底,本篇要做的事情就是对照上图的各个结构在内存中创建好然后写入到磁盘中,这样就完成了文件系统的创建。 超级块是各个结构的元信息,其中主要记录了各结构的起始lba地址以及所占用的扇区数,具体信息如下: i节点用于保存文件存储信息,结构如下(主要
2022-07-04 09:41:57 251
原创 操作系统真象还原[13章/二]-编写硬盘驱动程序
在之前,我们都是通过汇编语言向硬盘的不同端口写入信息来实现硬盘的操控,但是我们现在是在C语言的环境下编程,且很多程序需要频繁的操作硬盘,我们不可能每次都通过内嵌汇编语言以out指令的形式来操作硬盘,所以,我们需要将操作硬盘的动作封装成C语言的函数,方便我们进行调用,将底层的通过端口来操作硬盘的形式封装成函数,屏蔽底层的这些对端口操作的细节就是我们现在进行的工作,即编写硬盘驱动程序。 本篇文章只关注用C语言对底层端口操作进行封装的相关内容,也就是只关注编写硬盘驱动程序相关的内容。
2022-07-04 09:41:00 853
原创 操作系统真象还原[14章/一]-文件系统概念
硬盘是低速设备,其读写单位是扇区,为了避免频繁访问硬盘,操作系统不会有了一扇区数据就去读写一次扇区,往往等数据积攒到“足够大小”时才一次性访问,这足够的大小就是块,硬盘读写单位是扇区,因此一个块由多个扇区组成。 块是文件系统的读写单位,因此文件至少要占据一个块,当文件体积大于一个块时,文件肯定被拆分成多个块来存储,那么这多个块如何组织到一起?即文件的组织方式是什么? 直接说结论,链式文件组织方式的弊端是当访问文件中的某个块时,必须从头开始遍历块节点,因为文件的各个块是分散存储在硬
2022-07-04 09:40:00 209
原创 操作系统真象还原[13章/一]-创建从盘并分区
本篇博客主要记录13.1.1节到13.1.2节的内容,通过bochs/bin目录下的bximage程序创建80MB的硬盘作为从盘,然后在磁盘上创建分区表。从盘创建好后,将从盘信息写入bochs配置文件 配置文件如上,在硬盘设置中新增了ata0-slave的相关信息。 磁盘分区表位于MBR引导扇区与EBR引导扇区中,在此解释以下MBR与EBR的不同之处 MBR:主引导记录,位于磁盘0盘0道1扇区,结构为【主引导记录MBR】→【磁盘分区表DPT】→【结束魔数0x5
2022-07-04 09:38:04 495 1
原创 操作系统真象还原[12章/三]-完善堆内存管理(释放内存篇)
内存管理系统不仅能分配内存,还应该能回收内存,这是最基本的内存管理机制,一直以来我们对内存的管理都是只借不还,本节就是结束这一现状。本节的主要工作分为四大部分:一、实现以块为单位(4KB)内存释放的三个基础函数pfree、page_table_pte_remove、vaddr_remove二、将三个基础函数拼接实现以块为单位(4KB)的内存释放函数mfree_page三、实现精细化(通过上篇提到的arena机制)的内存释放函数s...............
2022-07-04 09:36:38 207
原创 操作系统真象还原[12章/二]-完善堆内存管理(申请内存篇)
本章之前实现的内存分配均是以页为单位即4KB大小的内存分配,无法实现精细的内存分配对内存空间浪费严重,因此本章对内存管理系统进行完善以提供精细化的内存分配。一、精细化内存管理准备工作精细化的内存分配依赖于arena、mem_block_desc、mem_block三种基础的数据结构。1、arena:arena是内存分配的仓库,其中包含仓库的元信息以及数个规模一致的内存块。以该仓库本质上是一页内存,然后将该页内存开始12字节储存仓库元............
2022-07-04 09:36:00 210
原创 操作系统真象还原[12章/一]-系统调用
一、系统调用的逻辑本章的内容前半部分对应于12.1~12.3节讲解了系统调用,理解了系统调用的逻辑后便可以轻松的增加自己编写的系统调用,所以理解这个逻辑非常重要。系统调用是提供给处于用户态即CPL=3下的用户进程使用的内核代码,这些功能非常重要以至于不能让用户态进程直接使用。比如内核态下可以直接向端口传输信息,但是用户态下是根据eflags中的IOPL位以及IO位图来决定能使用哪些端口,通常是不能使用任何端口的。这时如果我们想要往屏幕上输出信息就需要向显卡端口写数据,...............
2022-07-04 09:34:04 190
原创 操作系统真象还原[11章]-用户进程
本章在内核线程的基础上实现用户进程,主要区别是内核线程运行在特权级别3下,用户进程运行在特权级别0下。Intel原生为CPU提供的多任务机制主要是LDT/TSS,关于LDT/TSS简要阐述一下,现代操作系统与本书实现的操作系统均未实现该机制。LDT Intel官方提出LDT的目的就是为了把每个任务自己的代码、数据、栈段这些私有资源用单独的一个结构来存储,避免多任务运行时各个程序的资源混乱。但书中采用虚拟内存(平坦模型)+二级页表的机制已经天然的将各个............
2022-06-20 15:17:28 598
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人