操作系统
1
张国星就是个弱智
我是张国星,我就是个弱智
展开
-
读者写者问题
读者优先readcount = 0 表示读者数量mutex = 1 用于对writecount资源加锁w = 1 用于对资源操作加锁Reader() { P(mutex) readcount++ if(readcount==1) P(w) V(mutex) ...dosomething P(mutex) readcount-- if(readcount==0) V(w) V(mutex)}Writer() { P(w) ...dosomething原创 2020-12-18 22:06:35 · 206 阅读 · 1 评论 -
sed
-r: 使用扩展正则表达式-建议用到正则表达式的地方都统一加上 不容易混淆-f: 后接保存了sed指令的文件-i:对文件直接修改-n:sed默认输出所有行,使用-n参数后只显示处理过的行 一般与p组合使用a\:向匹配行后面插入内容i\:向匹配行前面插入内容sed '1a\haha' 1.txt // a前面的数字代表第几行后面sed '/line/a\haha' 1.txt // 如果多行匹配都会插入hahased '$i\haha' 1.txt // 最后一行前插入c\:将匹配行完全替原创 2020-11-26 11:38:59 · 219 阅读 · 0 评论 -
crantab,at
at用于处理仅执行一次就结束的指令 必须要atd服务at运作方式使用at指令产生所要运作的工作,将这个工作以文本的方式写入/var/spool/at/目录内,atd服务进行取用于执行1.先搜寻/etc/at.allow这个文件 写在这个文件中的使用者才能使用at2.如果/etc/at.allow不存在,就寻找/etc/at.deny,卸载这个文件中的使用者不能使用at3.如果两个文件都不存在,只有root可以使用at指令at [-mldv] TIMEat -c 工作号码-l:列出目前系统上原创 2020-11-25 15:01:32 · 101 阅读 · 0 评论 -
linux文件/目录权限
文件权限修改: chmod [-R] 740 filename中间的数组是根据 r:4 w:2 x:1 每种身份分别相加计算而来权限对文件的意义:r: 可读取文件的实际内容w: 可以编辑,新增,或者修改文件的内容(不包含删除该文件)x:该文件可被执行对于文件的rwx都是针对"文件的内容"而言权限对目录的意义:r:能够查询该目录下的所有文件名w:具有改动目录结构的权限->建立新的文件与目录删除已经存在的文件与目录(无论文件的权限)将已存在的文件或目录更名搬移该目录内的文原创 2020-11-17 15:09:58 · 249 阅读 · 0 评论 -
磁盘与文件系统
从磁盘中读写1个字节:移动磁头到指定磁道,旋转磁道直到指定扇区,通过磁生电/电生磁来读/取一个字节。只需要往控制器中写柱面,磁道,扇区,缓存位置,就能通过指令获取数据。操作系统对这整个过程进行了封装抽象。将多个扇区合成一个block,然后按照顺序排序,使得相邻盘号的block放在一起(这样连续读取相邻盘块可以花费较少的寻道时间),程序只需要传入一个block号,就能通过磁盘驱动自动取出多个相邻扇区的数据,block越大,空间浪费越多但是速度越快(每次寻道能读出更多的数据)。因为有多个进程都要对磁盘进.原创 2020-10-07 12:15:00 · 353 阅读 · 0 评论 -
输入输出
操作系统对外设的使用,实际上是对外设的控制器进行数据的读入读出,但是不同的设备控制器拥有不同的语义以及寄存器,所以操作系统将外设抽象成了文件视图,这样处理起来更加方便。无论什么设备都是通过操作系统提供的统一接口:open,read,write,close来进行调用。不同的设备文件对应不同的设备文件(/dev/xxx),根据设备文件找到控制器的地址,内容格式等。...原创 2020-10-06 14:51:35 · 68 阅读 · 0 评论 -
分段与分页
重定位一个程序要加入到内存后才能开始运行,我们需要在内存中找一块空闲区域来存放程序,那么对于程序中所指明的地址,我们需要进行重定位操作,将逻辑物理地址转化成实际的物理地址。重定位的时机:编译时:需要在编译时就知道哪些物理内存是空闲的(很不灵活),一般嵌入式系统可以用。载入时:在程序载入到内存时改变程序中的地址,但是一旦载入到内存中就不能在动了,但是程序在载入后都会需要移动(swap交换)。运行时重定位:每执行一条指令都从逻辑地址算出物理地址,每个进程的基地址都存放在PCB中,执行指令时第一步先从原创 2020-10-05 19:15:45 · 1034 阅读 · 0 评论 -
进程同步与信号量
对于多个进程访问共享数据,需要进程进行同步合作完成操作。我们可以使用信号量来描述共享数据。struct semaphore{ int value; // 记录资源的个数 PCB *queue; //记录等待在该信号量上的进程};P(semaphore s){ //消费资源 s.value--; if(s.value < 0){ sleep(s.queue); }}V(semaphore s){ // 产生资源 s.value++; if(s.value>=0){原创 2020-10-02 21:34:17 · 513 阅读 · 0 评论 -
线程
进程=资源+指令执行序列进程切换需要切换资源以及指令序列,当我们只切换指令序列,而资源公用的话,可以避免进程金环的代价且保留了并发的优点。用户级线程实际上就是我们平时所用的协程。调用点由用户进行设置,对于内核来说,不知道存在多个用户级线程,因此,在某一个线程阻塞时,内核无法切换用户级线程,只能切换到另一个进程。在线程创建以及切换时,只需要保存当时切换的状态就能顺利完成切换工作。每个线程都有各自独立的栈,使用TCB来保存其栈地址,调用Yield时,线程进行切换,将当前esp保存,将要切换的栈地址赋值给原创 2020-10-01 20:27:32 · 261 阅读 · 0 评论 -
多进程图像
CPU管理的直观看法CPU的工作原理:程序要运行需要放到内存中,其实就是有许多的指令存放在内存中,CPU每次都从中取出一条指令进行执行。多道程序交替执行当一个程序遇到IO阻塞时,此时不使用CPU,CPU完全可以切换到另外的一个程序进行执行,充分发挥CPU的效能。在进行切换的时候,需要修改PC的值以及返回地址,其他种种寄存器的值,这些信息都放在了一个名为PCB的结构当中。操作系统将这些进程记录好,按照合理的次序推进执行。从开机的时候,操作系统就启动了第一个进程(linux shell,window原创 2020-09-30 17:28:05 · 127 阅读 · 0 评论 -
操作系统接口
为何要有操作系统接口为了使用户不能随时随地的访问内存中内核部分的数据(使用jmp,mov等指令),需要提供给用户操作内核的方法。内核程序和用户程序隔离通过硬件将此时的状态分为内核态,用户态。内存分为内核段,用户段。内核态可以访问任何数据,用户态不能访问内核数据通过CS,DS两个段寄存器的信息来区分此时的状态DPL:目标内存段的特权级->在GDT表中,GDT表中用来描述一段内存,操作系统初始化时,就把操作系统内存段的DPL制成0CPL:当前内存段的特权级CS:IP是当前指令,用CS的最低原创 2020-09-28 17:28:24 · 383 阅读 · 0 评论 -
1.操作系统的启动
x86计算机为例1.电源开机时,cs=0xFFFF;IP=0x0000(此时为实模式与保护模式寻址方式不同),寻址0xFFFF0(ROM BIOS映射区),进行RAM,显示器,软硬磁盘等等设备2.将磁盘0磁道0扇区(512字节)读入0x7c00的地方(操作系统引导扇区)设置cs=0x7c0,ip=0x0000即此时跳到引导扇区进行执行3.引导扇区代码:bootsect.s, 将0x07c0:0x0000处的256个字移动到0x9000:0x0000处(腾出空间给操作系统使用), 开始载入setup模块原创 2020-09-23 21:32:21 · 217 阅读 · 0 评论