- 博客(23)
- 收藏
- 关注
原创 xv6学习笔记——操作系统架构
Xv6中的隔离单位是一个进程进程抽象防止一个进程破坏或监视另一个进程的内存、CPU、文件描述符等。它还防止一个进程破坏内核本身内核用来实现进程的机制包括:用户/管理模式标志、地址空间和线程的时间切片Xv6使用页表(由硬件实现)为每个进程提供自己的地址空间RISC-V页表将虚拟地址(RISC-V指令操纵的地址)转换(或“映射”)为物理地址(CPU芯片发送到主存储器的地址)操作系统可能会使用不同的虚拟地址空间部分来隔离栈和堆,或者出于安全性考虑,操作系统可能会将栈映射到较低的虚拟地址。
2023-11-28 20:50:12
1788
原创 xv6学习笔记——操作系统接口
也就是说,在调用pipe函数后,fd数组的两个成员就被初始化了,这两个描述符分别指向管道的读取端和管道的写入端。多个进程同时往管道里写数据时,如果数据量均小于PIPE_BUF字节,则认为写入操作是原子的,不会出现数据交错。父进程fork的返回值是子进程的pid,而子进程中的返回值是0 —>这是区别父子进程的方法。这会打开(或创建)一个名为 “output.txt” 的文件,并返回一个文件描述符。创建了一个子进程之后,父子进程会共享这个管道的文件描述符。时,它会返回一个新的文件描述符,这个。
2023-11-02 16:01:08
434
原创 c++项目分文件存储(.h .cc)
编译器在编译时会将 a.cc 中的实现与 b.cc 中的调用链接在一起形成可执行文件。c++项目中,能不能在a.h文件中写一个类,以及成员函数的声明,另一个a.cc文件写成员函数的实现,且b.cc文件里调用a.h类中的成员函数。是的,你可以在C++项目中使用分离的头文件(.h文件)和实现文件(.cc或.cpp文件)来定义和实现类。在 b.cc 文件中,你可以包含 a.h 头文件,并调用 MyClass 类中的成员函数。在头文件 a.h 中,你可以声明类的结构、成员函数的原型(声明),以及类的其他成员变量。
2023-07-21 09:34:04
302
1
原创 c++(类和对象_继承 / 多态)
菱形继承(解决子类继承两份相同的数据,从而导致资源的浪费)虚函数语法:virtual ~类名( ) {...}纯虚析构语法:virtual ~类名( ) = 0;—>类内类名::~类名( ) {...}使用:父类的指针或引用指向子类对象。虚析构和纯虚析构的共性。子类大小sizeof。
2023-05-24 20:28:34
824
9
原创 c++(引用、函数)
定义了一个函数 func,该函数的参数使用了常量引用,即 const。这表示在函数内部,我们不能修改 num 的值。,而我们就直接cout
2023-04-19 23:14:38
481
4
原创 团体程序设计天梯赛-练习集(点睛版)
写在前面该博客写了L1中所有的题解,以及每种题对应的算法,真的是 i 了 i 了捏 ^ _ ^ 看了下好像没有结构体 | _ | , 找找之前写过的叭—L1-003 个位数统计题因为输入的数太长,远远大于long long,因此用字符串 char a[1000]=""; scanf("%s",a);L1-006 连续因子题妙易错点分析注意这里求的是连续因子,很多人的想法就是:我把这个数的所有因子都求解出来,然后放进一个数组里,只需要判断是不是连续即可,这
2023-04-19 23:11:21
177
原创 随笔---线程
在这个函数中,我们定义了一个结构体变量tval,并初始化了它的成员var和str。然后,我们使用将结构体变量tval的地址强制转换成了void类型的指针,作为函数的返回值。但是,这个函数存在严重的问题,即返回了一个指向栈上局部变量的指针。这是不安全的因为在函数返回后,栈上的数据可能已经被销毁或被其他函数重写。如果在函数外部继续使用返回的指针,将会导致未定义的行为。为了解决这个问题,我们可以将结构体变量tval在上面的代码中,我们使用malloc()函数动态分配了一个。
2023-04-17 16:17:55
617
原创 实现自己的 shell
它将命令分割成多个子命令,并创建对应的子进程。子进程中对管道的读写端进行操作,连接多个子进程,实现管道的功能。对于最后一个子命令,从最后一个“|”之后的一个命令开始读取,一直到argv[argc-1]为止。根据管道数量创建对应数量的管道,并将管道的读写端分别存储在fd[pipe_num][2]数组中。以二维数组cmd[cmd_num][MAX_ARGS]的形式存储分割后的子命令。对于中间的子命令,从前一个“|”之后的一个命令开始读取,一直到下一个“|”为止。在子进程中执行对应的命令。
2023-03-29 22:13:49
489
原创 Linux 目录访问(opendir/closedir/readdir)
/ 存储获取的目录内容。//储存获取的目录流,给readdir作为参数。通常我们是不需要两个隐藏文件夹的,因此在遍历的时候直接跳过了。,.表示当前文件夹, ..表示当前文件夹的父文件夹。是在Unix 以及所有类unix系统中,注:需要注意的一个点是,
2023-02-25 23:37:30
1139
原创 设计一个 C 语言的动态扩容缓冲区
3.source和destin所指的内存区域可能重叠,但是如果source和dest所指的内存区域重叠,那么这个函数并。1.正常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。2.strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以。有符号整型,在32位机器上等同与int,在64位机器上等同与long int。能够对本身进行覆盖拷贝的函数,其又同时兼备了 memcpy函数 可做的事。:从文件描述符对应的文件读取数据,调用成功返回读出的字节数。
2023-01-06 21:54:18
658
原创 2020西邮linux兴趣小组纳新题题解
数列的第100项,你觉得还可以用常规的方法求解吗?请试着求出前100项的值(tip大数运算)。第三步,随机输入一个数字,请问最终输出了什么结果,你知道其中的原理吗?表示整个数组的地址加上2* 2*int(一个数组)类型大小的地址(表示第一行地址加上一个2*int(一行)类型大小的地址(表示首元素地址加上一个int类型的大小的地址(的地址,假如在你的机器上面打印结果是。的地址,&a[0][0]表示。我们可以通过第一步打印出。的地址,&a[0]表示。
2022-11-20 13:59:13
478
1
原创 2021西邮linux兴趣小组纳新题题解
函数用来将作为参数的字符串中的大写字母转换为小写字母,将小写字母转换为大写字母。1.本地变量定义在块内,且不会被默认初始化(因此第一个的输出结果为随机值)2.程序运行到“块”之前,其中的变量不存在;离开“块”,其中的变量消失了。:把A的数值传到B,改变B,A不会跟着变,B存的是跟A一样的值。:把A的地址传到B,改变B,A同时跟着变,B存的是A的地址。4.“块”里面定义了和外面同名的变量,则会掩盖外面的。3.“块”外面定义的变量其一下到处有效。请说明下面的程序是如何完成求和的?三个变量和4个相似的函数。
2022-11-20 10:49:16
653
1
原创 2022西邮linux兴趣小组纳新题题解
请结合本题,分别谈谈你对C语言中「全局变量」和「局部变量」的「生命周期」理解。拼接输入的两个字符串,并翻转拼接后得到的新字符串中所有字母的大小写。,原因在于int数组大小的12并不能被大小为8的double所整除。请谈谈你所了解的排序算法的思想、稳定性、时间复杂度、空间复杂度。但别担心,这是选做题,不会对你的面试产生很大的影响!程序的输出有点奇怪,请尝试解释一下程序的输出吧。程序的输出有点奇怪,请尝试解释一下程序的输出吧。各有什么特点呢,你了解他们的内存分配模式吗。②结构体可以分成N份,每份的大小是。
2022-11-18 20:06:41
626
5
空空如也
关于字符串的拼接问题(入门)
2022-10-31
有关桶排查重的问题(入门)
2022-10-31
数组与指针的问题(入门)
2022-10-30
关于 !运算的问题(入门)
2022-10-29
二进制数的输出(入门)
2022-10-28
宏的简单替换(入门)
2022-10-27
指向分数组的指针(简单问题)
2022-10-27
指针定位二维数组的一些小问题
2022-10-23
对int *a=(int*)3的理解
2022-10-18
有关冰雹猜想的一些问题
2022-10-15
有关pat浮点错误的问题
2022-10-05
TA创建的收藏夹 TA关注的收藏夹
TA关注的人