<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[fang92的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/fang92</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; fang92]]></copyright><item><title><![CDATA[一个二维矩阵,里面只有0和1,问怎样求指定某一个格与它数字相同的连通格子个数]]></title><link>https://blog.youkuaiyun.com/fang92/article/details/50921600</link><guid>https://blog.youkuaiyun.com/fang92/article/details/50921600</guid><author>fang92</author><pubDate>Fri, 18 Mar 2016 11:08:22 +0800</pubDate><description><![CDATA[一个二维矩阵,里面只有0和1,问怎样求指定某一个格与它数字相同的连通格子个数
记录一下  感觉效率不高
int iter(int x, int y, vector>& nums, vector>& dp){

    int lenX = nums.size();
    int lenY = nums[0].size();
    if (x = lenX || y = lenY)]]></description><category></category></item><item><title><![CDATA[printf缓存问题]]></title><link>https://blog.youkuaiyun.com/fang92/article/details/50493841</link><guid>https://blog.youkuaiyun.com/fang92/article/details/50493841</guid><author>fang92</author><pubDate>Sun, 10 Jan 2016 21:18:42 +0800</pubDate><description><![CDATA[转载至：http://www.cnblogs.com/zackyang/archive/2010/01/19/1651929.html#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>int main (int argc, char *argv[])
{
    printf("%d           %d\n", getpi]]></description><category></category></item><item><title><![CDATA[return和exit]]></title><link>https://blog.youkuaiyun.com/fang92/article/details/50493597</link><guid>https://blog.youkuaiyun.com/fang92/article/details/50493597</guid><author>fang92</author><pubDate>Sun, 10 Jan 2016 20:31:17 +0800</pubDate><description><![CDATA[return和exit标签（空格分隔）： APUE　　在每个函数结束之后，习惯上都会return一下。而在main函数里面，既可以用return,也可以用exit来结束进程。现在来看看return到底做了什么。 
    　　先写一个简单的Ｃ程序：#include<stdio.h>
int add(int ,int);int main(){
    int a = 1;
    int b = 2;]]></description><category></category></item><item><title><![CDATA[软链接和硬链接]]></title><link>https://blog.youkuaiyun.com/fang92/article/details/50389966</link><guid>https://blog.youkuaiyun.com/fang92/article/details/50389966</guid><author>fang92</author><pubDate>Wed, 23 Dec 2015 21:48:17 +0800</pubDate><description><![CDATA[软链接和硬链接标签（空格分隔）： APUE　linux的文件系统里面，链接分为软链接和硬链接。现在ｕｂｕｎｔｕ里面实际看一下，两者有什么区别。 
　先说在命令行里面怎么实现软链接和硬链接： 
　touch file : 改变file的时间戳，如果file不存在，则新建file. 
　ln file1 file2: 新建file2作为file1的硬链接。 
　ln -s file1 file2: 新建]]></description><category></category></item><item><title><![CDATA[MIT6.828 LAB4 PartB]]></title><link>https://blog.youkuaiyun.com/fang92/article/details/50223659</link><guid>https://blog.youkuaiyun.com/fang92/article/details/50223659</guid><author>fang92</author><pubDate>Tue, 08 Dec 2015 20:26:31 +0800</pubDate><description><![CDATA[JOS LAB4 PartB 
　　PartB主要讲述了fork的写时复制的实现，为了满足实现的要求，需要page_fault的实现，即页面异常处理。 
　　 
　　 
　　　这里主要实现几个系统调用函数，以供后面的ｆｏｒｋ实现调用。这些系统调用都比较简单。这里就看下   sys_exofork的实现。 
　　　 sys_exofork这个函数只是fork函数的一个雏形，他的功能就是新建立一个进程，]]></description><category></category></item><item><title><![CDATA[MIT6.828 Lab4 PartA]]></title><link>https://blog.youkuaiyun.com/fang92/article/details/49515959</link><guid>https://blog.youkuaiyun.com/fang92/article/details/49515959</guid><author>fang92</author><pubDate>Wed, 04 Nov 2015 21:47:23 +0800</pubDate><description><![CDATA[lab4地址：https://pdos.csail.mit.edu/6.828/2014/labs/lab4/ 
　　lab4主要是讲多核处理器的系统的实现，主要包括３个part，多核系统的实现，fork，和任务抢断。]]></description><category></category></item><item><title><![CDATA[JOS 轮转调度实现]]></title><link>https://blog.youkuaiyun.com/fang92/article/details/49643573</link><guid>https://blog.youkuaiyun.com/fang92/article/details/49643573</guid><author>fang92</author><pubDate>Wed, 04 Nov 2015 21:19:27 +0800</pubDate><description><![CDATA[JOS的轮转调度思想比较简单，当env[i]进程来调用sched_yield()函数的时候，表示进程i要让出CPU了，此时，系统会从i开始，不停的往下寻找状态为runnable的进程，然后执行那个进程。]]></description><category></category></item><item><title><![CDATA[JOS大内核锁]]></title><link>https://blog.youkuaiyun.com/fang92/article/details/49623363</link><guid>https://blog.youkuaiyun.com/fang92/article/details/49623363</guid><author>fang92</author><pubDate>Tue, 03 Nov 2015 22:29:37 +0800</pubDate><description><![CDATA[JOS lab4里面，采用了SMT的操作系统，所以可能存在两个CPU同时进入内核态，虽然CPU之间的内核栈，但是多核同步可能还是会出现问题，所以JOS采用大内核锁来锁住整个内核，使得每次只有一个CPU会进入内核，另外的CPU如果申请进入内核态，是进不去的。]]></description><category></category></item><item><title><![CDATA[JOS 系统调用的过程]]></title><link>https://blog.youkuaiyun.com/fang92/article/details/48418127</link><guid>https://blog.youkuaiyun.com/fang92/article/details/48418127</guid><author>fang92</author><pubDate>Mon, 14 Sep 2015 20:15:50 +0800</pubDate><description><![CDATA[系统调用，是用户态进程转向内核态的一种安全机制，在保证了内核空间安全并且不被破坏的的前提下，让用户态程序可以实现一定的功能。
通过JOS系统，来看系统调用的具体过程。
系统调用，在语言层面来看，其实可以把系统调用看成是一种函数的调用。只是这种函数调用，不同于一般的用户态下的函数调用，用户态下，函数调用，只需要用栈来保存各种信息就可以了，因为调用前后，保存的信息的栈都是用户地址空间下的栈，所以只]]></description><category></category></item><item><title><![CDATA[JOS 系统中第一个用户进程的建立和运行]]></title><link>https://blog.youkuaiyun.com/fang92/article/details/48372697</link><guid>https://blog.youkuaiyun.com/fang92/article/details/48372697</guid><author>fang92</author><pubDate>Fri, 11 Sep 2015 21:22:53 +0800</pubDate><description><![CDATA[一：进程的表示：
在jos系统里面，进程用一个struct结构体Env来存储相应的信息，这个ENV的结构体有点类似于进程描述符一类的东西。

struct Env {
	struct Trapframe env_tf;		// Saved registers
	struct Env *env_link;			// Next free Env
	envid_t env_id;				// Un]]></description><category></category></item><item><title><![CDATA[leetcode Sort List]]></title><link>https://blog.youkuaiyun.com/fang92/article/details/48224523</link><guid>https://blog.youkuaiyun.com/fang92/article/details/48224523</guid><author>fang92</author><pubDate>Sat, 05 Sep 2015 14:43:49 +0800</pubDate><description><![CDATA[sort list: https://leetcode.com/problems/sort-list/


数组的排序比较相对于链表的，还是比较容易的。链表的排序，有一个最麻烦的地方就是，无法通过下标来访问节点，所以操作起来就没有数组那么方便。
链表排序，拿到这题，第一个想到的是快排。快排的思路和数组的一模一样，只不过要多两个list指针，一个指向比较节点的left， 一个指向比较节点的r]]></description><category></category></item><item><title><![CDATA[二叉树遍历-----前序后序迭代遍历的新思路]]></title><link>https://blog.youkuaiyun.com/fang92/article/details/48209363</link><guid>https://blog.youkuaiyun.com/fang92/article/details/48209363</guid><author>fang92</author><pubDate>Fri, 04 Sep 2015 17:29:43 +0800</pubDate><description><![CDATA[leetcode二叉树遍历
前序遍历：https://leetcode.com/problems/binary-tree-preorder-traversal/
中序遍历：https://leetcode.com/problems/binary-tree-inorder-traversal/
后序遍历：https://leetcode.com/problems/binary-tree-pos]]></description><category></category></item><item><title><![CDATA[ELF文件格式学习]]></title><link>https://blog.youkuaiyun.com/fang92/article/details/48092165</link><guid>https://blog.youkuaiyun.com/fang92/article/details/48092165</guid><author>fang92</author><pubDate>Sun, 30 Aug 2015 12:22:55 +0800</pubDate><description><![CDATA[最近的lab里面有ELF文件相关的，所以成这个几乎，学点ELF的东西。
ELF，是一种文件格式。暂时，只看可执行文件的ELF文件格式。
首先，给出文件的格式的布局图：

光看这个很难理解，所以写一个小的程序，用readelf来结合的看。
程序比较简单：
#include 
#include 

int data[100] ={0};
int bss[100];

int main()]]></description><category></category></item><item><title><![CDATA[MIT6.828 JOS系统  lab2]]></title><link>https://blog.youkuaiyun.com/fang92/article/details/47322241</link><guid>https://blog.youkuaiyun.com/fang92/article/details/47322241</guid><author>fang92</author><pubDate>Wed, 19 Aug 2015 21:52:31 +0800</pubDate><description><![CDATA[MIT6.828 LAB2：http://pdos.csail.mit.edu/6.828/2014/labs/lab2/
LAB2里面主要讲的是系统的分页过程，还有就是简单的虚拟地址到物理地址的过程。关于系统分页，在MIT6.828
 虚拟地址转化为物理地址——二级分页中有讲。
下面主要是lab2的几个exercise的解题过程。

1.第一个boot_alloc()函数：
stat]]></description><category></category></item><item><title><![CDATA[MIT6.828 虚拟地址转化为物理地址——二级分页]]></title><link>https://blog.youkuaiyun.com/fang92/article/details/47320747</link><guid>https://blog.youkuaiyun.com/fang92/article/details/47320747</guid><author>fang92</author><pubDate>Thu, 06 Aug 2015 20:14:35 +0800</pubDate><description><![CDATA[Mit6.828 Lab2:http://pdos.csail.mit.edu/6.828/2014/labs/lab2/
lab2主要讲虚拟内存->物理内存的变换，通过一定的函数来实现软件MMU的部分。
整个地址转化的过程如下图所示：


首先，明确一点，在程序里面的所有地址，都是虚拟地址，程序里面是不会出现物理地址的，就算是物理地址，CPU也会把它当做虚拟地址，通过MMU转化为物理地]]></description><category></category></item><item><title><![CDATA[leetcode39 Combination Sum]]></title><link>https://blog.youkuaiyun.com/fang92/article/details/47156797</link><guid>https://blog.youkuaiyun.com/fang92/article/details/47156797</guid><author>fang92</author><pubDate>Wed, 05 Aug 2015 21:48:03 +0800</pubDate><description><![CDATA[Combination Sum
 :https://leetcode.com/problems/combination-sum
这道题目由于数据量比较大，所以好的方法和差的方法时间上来说，差非常的多。
这道题目的主要要求就是：给定一个数组，和一个数T，要求用数组里面的数进行组合，使组合出来的数的和为数T，数组里面的数可以重复使用。
如：[2,3,6,7]和数7，
给出的解应该是:[7],]]></description><category></category></item><item><title><![CDATA[控制台下的计算器——C++实现]]></title><link>https://blog.youkuaiyun.com/fang92/article/details/47154725</link><guid>https://blog.youkuaiyun.com/fang92/article/details/47154725</guid><author>fang92</author><pubDate>Thu, 30 Jul 2015 20:53:57 +0800</pubDate><description><![CDATA[最近这段时间看操作系统的东西看的头晕脑胀的，所以先停个一晚上，写个命令行式的计算器，来练练栈的使用。
首先，分析一下要完成的东西。输入肯定使用string类来输入的，然后第一步，就是把string的字符串转化成数字存储起来。转化的这个数字存储是中序表达式，由于运算符有优先级的问题，中序表达式直接计算结果不好计算，所以需要把他转化成后序表达式，最后进行计算。
主要的函数：
(1)把string]]></description><category></category></item><item><title><![CDATA[136 Single Number]]></title><link>https://blog.youkuaiyun.com/fang92/article/details/46762745</link><guid>https://blog.youkuaiyun.com/fang92/article/details/46762745</guid><author>fang92</author><pubDate>Sun, 05 Jul 2015 13:20:25 +0800</pubDate><description><![CDATA[题目地址：https://leetcode.com/problems/single-number/
题目：Given an array of integers, every element appears twice except
 for one. Find that single one.
题目意思就是给一个数组，有一个数字只出现了一次，另外的数都出现了2次，要把这个出现一次的数找出来。]]></description><category></category></item><item><title><![CDATA[6.828 lab1 bootload]]></title><link>https://blog.youkuaiyun.com/fang92/article/details/46517723</link><guid>https://blog.youkuaiyun.com/fang92/article/details/46517723</guid><author>fang92</author><pubDate>Tue, 16 Jun 2015 14:18:40 +0800</pubDate><description><![CDATA[第一个练习，主要是让我们熟悉汇编，嗯，没什么好说的。



Part 1: PC Bootstrap

首先，整个实验使用qemu这款模拟软件来，来对代码进行调试，相当于我们在qemu这个模拟的计算机平台上，运行自己的程序。可以再qemu这个软件上进行gdb的调试，比较方便。
首先看下整个内核在qemu上的模拟的结果：


整个内核现在能实现的就两个功能，一个kerninfo，]]></description><category></category></item><item><title><![CDATA[函数调用时程序堆栈的变化]]></title><link>https://blog.youkuaiyun.com/fang92/article/details/46494665</link><guid>https://blog.youkuaiyun.com/fang92/article/details/46494665</guid><author>fang92</author><pubDate>Sun, 14 Jun 2015 21:25:19 +0800</pubDate><description><![CDATA[这个主要写一点关于在C里面，堆栈是怎么保存数据的，以及调用函数时，堆栈指针的变化。
首先说明两个寄存器
1.rbp：栈帧指针，具体应该是指向当前函数栈的栈底，是不动的。实际的作用应该就是类似于一个基址，通过这个基址上栈中变量的寻址。
2.rsp：栈顶指针。


首先，写了一个比较简单的C程序：
#include


int add_func(int arg1,int arg2)
{]]></description><category></category></item></channel></rss>