操作系统
文章平均质量分 96
unclerunning
这个作者很懒,什么都没留下…
展开
-
进程—异常控制流之中断篇
从给处理器加电开始,直到断电为止,PC(程序计数器)都在不间断的读取并执行指令。 最简单的一种控制流是一个”平滑的”序列,其中每个instkinst_k和instk+1inst_{k+1} 在存储器中都是相邻的。典 型地,这种平滑流的突变,也就是instkinst_k和instk+1inst_{k+1} 不相邻,是由诸如跳转(jump)、调用原创 2016-04-19 14:08:05 · 2930 阅读 · 0 评论 -
Qt事件机制概览
Qt事件机制概览Qt事件机制概览消息循环Qt事件循环简介QEventLoop跨线程的信号和槽与事件循环模态窗口Native widget or Alien widget创建Native widget派发事件的公共基础方法source codeQApplication的创建过程QWidget native QWidget 的创建过程普通native widget回调过程Q原创 2017-04-18 12:16:12 · 9886 阅读 · 7 评论 -
C++堆内存分配
C++堆内存分配C堆内存分配抽象与分层如何扩展有效堆内存brk和sbrk系统调用如何维护有效堆内存operator new抽象与分层 c和c++的内存服务模型与计算机网络里面的协议分层模型有点类似。计算机网络协议大体分为5层:应用层、传输层、网络层、数据链接层和物理层。其中,上层仅仅只需在下层所提供的服务之上构建自己的服务,而不用关心它的下下层所提供的服务。例如,http应用要完成相原创 2017-03-30 08:42:46 · 5476 阅读 · 1 评论 -
局部变量太大导致栈溢出
局部变量太大导致栈溢出问题: 昨天,有同学遇到栈溢出的问题。在做大三小学期项目时,需要一个750x750的矩阵。于是在栈中定义了一个二维数组。为了说明问题,做如下简化:/*测试环境:window平台 vs2013*/int main(){ //占用栈内存,局部变量,太大,栈溢出 double test[750][750]; return 0; } 这看似没有原创 2016-07-17 12:18:24 · 19156 阅读 · 0 评论 -
文件系统调用和Linux文件系统基础
文件系统调用和Linux文件系统基础keywords fdisk、LBA、CHS、MBR、super struct、directory、file、inode、inode table、block、file descriptor、file descriptor table、open file descriptor、open file table、mount point、vfsmount struc原创 2016-07-05 17:20:50 · 5031 阅读 · 0 评论 -
Linux内存管理基础
系统启动之Linux内存管理基础系统启动之Linux内存管理基础Keywords闲言碎语操作系统启动过程1 bootloader的主要任务是2 为启用分页机制做准备并使能分页机制21 建立临时页表3 initmaincstart_kernerl4 PKmap区41 mmhighmemcpage_address_init物理内存描述初始化1 archi386kernelsetup原创 2016-07-15 14:38:33 · 8823 阅读 · 1 评论 -
系统调用open的大概执行路径
系统调用open的执行路径 代码来自Ucore教学操作系统//用户通过open系统调用接口,执行int 0x80指令,进入内核,查找系统调用表,调用sys_open。level 1: sys_open//---level 1---static uint32_tsys_open(uint32_t arg[]) { const char *path = (const char *)arg原创 2016-07-02 20:57:38 · 3386 阅读 · 0 评论 -
进程—进程调度(1)
进程—进程调度(1)上下文切换 进程可以调度,但必须保证每个进程都可以顺序的执行,而一个进程执行所需的全部信息可由进程的PCB(task_struct)维护,所以在进程发生切换的时候可以将当前进程的运行状态信息(快照)保存到它的PCB中(这样就能在下一次调度程序选择到它时接着上一状态继续执行),将马上要执行的进程的运行状态信息(在PCB中)恢复,这样就可以合理的完成调度,这个过程就叫上下文切换。原创 2016-05-04 11:46:34 · 3239 阅读 · 1 评论 -
进程—异常控制流之陷阱篇
一、Exceptions(异常) and System Call(系统调用)1.1 陷阱 陷阱是有意为之的异常,是处理器执行程序的一条指令的结果。陷阱最重要的用途是提供用户程序和内核之间一个像普通过程调用似的接口,名曰:系统调用。用户程序经常需要向内核请求服务,比如读一个文件(read) 、创建一个新的进程(fork) 、加载一个新的程序(execv),或者终止当前进程(exit) 。为了原创 2016-04-20 00:22:42 · 5440 阅读 · 0 评论 -
进程—同步与互斥基础
同步与互斥基础一、临界区 临界区:具体一点,在程序中,临界区就是一段代码区域,这段代码区在任何时间点至多只有一个进程在运行它的代码。二、竞争条件 打个比方:有个大米库所,里面装了若干袋的大米,前台有个记录册记录了当前库所的库存。当一个员工运来大米时,他首先参看记录册中记录了多少袋大米,然后将自己送来的大米放入仓库,最后将自己新加入的大米的袋数与他之前记下的记录册记录的袋数相加,并将结果更新原创 2016-06-29 23:10:02 · 703 阅读 · 0 评论 -
进程—异常控制流之故障、终止篇
进程—异常控制流之故障、终止篇一、Exceptions(异常) and System Call(系统调用) 1.1 故障 故障由错误情况引起,它可能能够被故障处理程序修正。当故障发生时,处理器将控制转移 给故障处理程序。如果处理程序能够修正这个错误情况,它就将控制返回到引起故障的指令,从 而重新执行它。否则,处理程序返回到内核中的abort 例程, abort 例程会终止引起故障的原创 2016-04-21 17:42:14 · 3027 阅读 · 0 评论 -
进程—内存段机制
进程—内存段机制 开始阅读之前可以先看看The Curse of Segments1.x86的硬件段机制 wiki.osdev-Segmentation Modes of Memory Addressing on x861.1 段机制的引入 就在8086CPU出现之前,地址总线已经是16位(64KB)的了,在刚开始,段的引入是为了解决“地址总线的宽度大于寄存器的宽度”这原创 2016-05-13 15:11:37 · 4650 阅读 · 0 评论 -
进程—Linux进程描述符初印象
进程—从进程描述符展开(一)进程内核栈结构:union task_union 在../include/linux/sched.h中定义了如下一个联合结构用来创建内核栈空间。//../include/linux/sched.hunion task_union { struct thread_info thread_info; unsigned long原创 2016-04-25 23:27:46 · 6546 阅读 · 0 评论 -
进程—初印象
在有进程地址空间虚拟化概念之前,所有的程序都得实打实的知道自己在物理内存中的分配(程序员手写分配啊!!!)。如果程序小、少,还能凑合着进行管理,但是,面对实际的多程序,大体量程序,不得不将内存的管理与程序的编写进行分离,尽管这样做“有一点1”降低效率。 Using Physical Address: Using Virtual Address:原创 2016-04-18 00:32:43 · 1416 阅读 · 0 评论 -
利用c++11,简单定制自己的线程类
利用c++11,简单定制自己的线程类利用c11简单定制自己的线程类simplethreadhsimplethread.h#ifndef SIMPLETHREAD_H#define SIMPLETHREAD_H#include <thread>#include <condition_variable>#include <memory>using namespace std::chrono;c原创 2017-05-14 17:58:25 · 1823 阅读 · 2 评论