
OS
mazamu
沉迷学习无法自拔。
展开
-
CSAPP-shlab
附上代码:/* * tsh - A tiny shell program with job control * * <Put your name and login ID here> */#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <ctype.h>#include <signal.原创 2021-11-02 11:41:28 · 217 阅读 · 0 评论 -
CSAPP-cachelab
CSAPP的缓存实验分为partA和partBpartA就是模拟一个缓存难的不是处理缓存的思路,而是处理参数的思路,如何将参数、内容抽象成数据结构。#include "cachelab.h"#include <getopt.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#define IDX(m,n,E) m * E + n#define MAXSIZE 30char i原创 2021-10-27 15:26:09 · 416 阅读 · 0 评论 -
CSAPP-Architecture lab
archlab这个实验要做的是将c语言转化成Y86-64汇编指令。gcc -c examples.c objdump -d examples.c > examples.d 5 Disassembly of section .text: 6 7 0000000000000000 <sum_list>: 8 0: 55 push %rbp 9 1: 48 89 e5 m原创 2021-10-24 15:52:43 · 842 阅读 · 0 评论 -
CSAPP-Attack lab
此实验有五个任务第一个任务是让你跳转到touch1函数void test(){ int val; val = getbuf(); printf("No exploit. Getbuf returned 0x%x\n", val);}unsigned getbuf() { char buf[BUFFER_SIZE]; Gets(buf); return 1;}void touch1() { vlevel = 1; printf("Touch1!: You called tou原创 2021-10-23 14:03:11 · 237 阅读 · 0 评论 -
进程、线程、协程的区别
进程、线程和协程的区别和联系空白进程线程协程定义进程是资源分配的单位线程是CPU调度的基本单位协程是用户态的轻量级线程,线程内部调度的基本单位切换情况进程CPU环境(栈、寄存器、页表和文件句柄等)的保存以及新调度的进程CPU环境的设置线程保存寄存器和栈的内容,程序计数器协程先将寄存器上下文和栈保存,等切换回来再进行恢复切换者操作系统操作系统用户切换过程用户态-》内核态-》用户态用户态-》内核态-》用户态协程只有用户态调用栈内核栈内原创 2021-09-08 09:32:05 · 122 阅读 · 0 评论 -
ADRS是什么
ARDS全称:Address Range Descriptor Structure地址范围描述符原创 2021-09-06 19:49:46 · 455 阅读 · 0 评论 -
linux中进程和线程的区别(fork和pthread_create的区别)
linux中进程和线程的区别在linux中两者区别不大,底层都是通过clone函数来创建,只是参数不同,先上一个clone()参数标志:pthread_create使用的clone是:clone(CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND,0)fork使用的clone是:clone(SIGCHLD,0)vfork使用的clone是:clone(CLONE_VFORK | CLONE_VM | SIGCHLD,0)区别只是在于clone参数原创 2021-09-02 23:17:00 · 2571 阅读 · 0 评论 -
CPU是如何工作的
CPU是如何工作的CPU里面有控制单元、运算单元、存储单元。控制单元是CPU的控制中心,有它CPU才知道要做什么,控制单元大致由指令寄存器(IR)、指令译码器(ID)、操作控制器(OC)组成。程序被加载到内存中,指令指针寄存器(IP)指向要执行的指令,将指令载入到指令寄存器,由指令译码器将指令按照一定格式进行译码,IP自增:指令有了,但是指令中的数据从哪来,这时便用到了存储单元,CPU里的存储单元有L1、L2缓存以及寄存器,待处理的数据就存在这些存储单元里面,这里的数据值就是值操作数。操作码、操作原创 2021-08-29 23:56:54 · 399 阅读 · 0 评论 -
操作系统实模式相关
FFFF0-FFFFF的指令如下:是一条跳转指令(jmp 0xfe05b),表示跳转到BIOS代码真正开始的地方,BIOS载入一些硬件信息,如何跳转到0x7c00处,交由MBR执行。接下来便是填写MBR了:mbr.s;主引导程序 ;------------------------------------------------------------SECTION MBR vstart=0x7c00 mov ax,cs mov ds,ax mov.原创 2021-08-29 21:58:28 · 233 阅读 · 0 评论 -
x11/extensions/xrandr.h:No such file or directory
x11/extensions/xrandr.h:No such file or directory解决办法yum install libXrandr-devel原创 2021-08-29 19:12:18 · 2703 阅读 · 0 评论 -
内存为什么要分段
内存为什么要分段分段指的是“段基址+段内偏移”。先说如果没有分段会导致什么情况:CPU访问内存需要把代码编译成机器指令,并以绝对物理地址方式访问内存,如果程序中的地址是绝对物理地址,则必然要存放在内存的固定地方,如果两个程序编译出来的机器指令是相同的物理地址,则会造成覆盖。即只能运行其中一个。这时便引出分段,“段基址+段内偏移”,如果你知道了程序里面的内容位置相对于程序的头部位置是不变的,即相对位置不变,那么改变段基址,可以避免上面的覆盖现象,所以便有了分段的概念。...原创 2021-08-29 11:03:25 · 792 阅读 · 0 评论 -
五种IO模型
五种IO模型阻塞IO、非阻塞IO、信号驱动IO、IO复用、异步IO。阻塞IO调用线程等待内核IO操作执行完成,才进行后续操作。非阻塞IO调用线程得到内核IO返回的状态值,如果可执行IO操作就执行,如果不能就做其他事情。阻塞IO与非阻塞IO的区别信号驱动IO应用进程告诉内核,如果数据准备好,就发送一个信号,对SIGIO信号进行捕捉,并调用相应的信号处理函数。IO复用典型的就有select、poll和epoll。就是应用程序向内核注册事件,内核负责对这些事件进行监听,如果事件发生了,则内原创 2021-08-25 10:25:23 · 87 阅读 · 0 评论 -
阻塞IO与非阻塞IO的区别
阻塞IO与非阻塞IO的区别阻塞IO,指的是需要内核IO操作彻底完成后,才返回到用户空间执行用户的操作。阻塞是指用户空间的执行状态。非阻塞IO,指的是用户空间的程序不需要等待内核IO操作彻底完成,可以立即返回用户空间执行用户操作,即处于非阻塞IO状态,内核空间会立即返回给用户一个状态值。阻塞IO:调用线程一直在等待,不能干别的事情。非阻塞IO:调用线程拿到内核返回的状态值后,IO操作能干就干2,不能就干别的事情。...原创 2021-08-25 10:13:38 · 5883 阅读 · 0 评论 -
线程如何切换上下文(即线程切换)
线程结构体task_struct有个TR寄存器,TR寄存器里有个TSS段选择符(TSS全称是任务状态段),TSS段指向的就是TSS结构体里保存着寄存器的状态,当线程切换时,把当前CPU的寄存器状态存进task_struct里指向的TSS结构体,然后TR换入新的TSS段选择符,新的TSS段选择符指向保存切换后的线程寄存器状态的TSS结构体,再然后从新的TSS结构体中把寄存器状态恢复到当前CPU的寄存器里,从而完成线程切换。...原创 2021-08-21 23:53:30 · 714 阅读 · 0 评论 -
操作系统是什么
操作系统的概念现代计算机系统由许多硬件组成,如处理器、主存、磁盘、打印机、鼠标键盘、显示器、网络接口以及各种其它输入输出设备组成。这是一个很复杂的系统,操作系统则是为了管理这些硬件,以及向程序员提供更好的编程环境(屏蔽硬件编程相关的东西)而设计出来的软件。另一种说法是,操作系统是一种把复杂抽象成简单的软件,把“丑陋“的硬件接口抽象成”美丽“的软件接口,方便程序员使用。再有一种说法是,操作系统负责管理好所有的资源,资源管理分为时间和空间复用,这其中的涉及到共享、独占、执行顺序等一系列问题。...原创 2021-08-14 16:40:54 · 1094 阅读 · 0 评论 -
什么是僵尸进程与孤儿进程
僵尸进程僵尸进程是指 那些已经终止,但仍保留一些信息的进程(PCB),等待其父进程给它收尸。收尸的意思是给父进程提供信息。孤儿进程这里引出一个孤儿进程:父进程比子进程先终止,子进程成为孤儿进程,当它终止时将永远处于僵死状态,白白浪费内存。避免孤儿进程方法: 给孤儿进程找养父,先从同一个进程组里寻找养父,若同进程组里只此孤儿进程,则把init进程置为养父进程。init进程(进程号为0) 是所有进程的“鼻祖”,在内核启动时创建。...原创 2021-05-12 09:16:59 · 137 阅读 · 0 评论