<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[hanzy0823的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/hanzy0823</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; hanzy0823]]></copyright><item><title><![CDATA[基于堆栈的计算器实现算法]]></title><link>https://blog.youkuaiyun.com/hanzy0823/article/details/17715627</link><guid>https://blog.youkuaiyun.com/hanzy0823/article/details/17715627</guid><author>hanzy0823</author><pubDate>Tue, 31 Dec 2013 15:22:34 +0800</pubDate><description><![CDATA[对于计算器，有很多成熟的理论。本文章讨论的是利用一个操作数堆栈和一个运算符堆栈进行运算的方法。这种算法已经有很完善的解决方案，此处讨论的是最简化的模型，旨在让初学者在最短的时间内学到此算法的精髓，并能灵活的应用到科研的任何一个领域。
简单表达式的计算
      首先请看这个表达式：
      3＋5＋6＊7＊8＾2＾3 （8＾2指的是82）
      这里运算有三种优先级“＾”--＞]]></description><category></category></item><item><title><![CDATA[C# 下 FtpWebRequest 类的一个小问题]]></title><link>https://blog.youkuaiyun.com/hanzy0823/article/details/17415509</link><guid>https://blog.youkuaiyun.com/hanzy0823/article/details/17415509</guid><author>hanzy0823</author><pubDate>Thu, 19 Dec 2013 14:40:25 +0800</pubDate><description><![CDATA[近日用到了FtpWebRequest这个类，用于连接到FTP服务器来下载文件，但是在使用下面代码的时候遇到了一些问题：
     private FtpWebRequest GetRequest(string url, bool useBinary)
        {

            FtpWebRequest ftpRequest = (FtpWebRequest)WebRe]]></description><category></category></item><item><title><![CDATA[一种基于重载的高效c#上图片添加文字图形图片的方法]]></title><link>https://blog.youkuaiyun.com/hanzy0823/article/details/17278443</link><guid>https://blog.youkuaiyun.com/hanzy0823/article/details/17278443</guid><author>hanzy0823</author><pubDate>Thu, 12 Dec 2013 10:22:31 +0800</pubDate><description><![CDATA[在做图片监控显示的时候，需要在图片上添加文字，如果用graphics类绘制图片上的字体，实现图像上添加自定义标记，这种方法经验证是可行的，并且在visual c#2005 编程技巧大全上有提到，但是，这种方法处理图片的速度超级慢。一面介绍一种一种基于重载的高效c#上图片添加文字图形图片的方法。


using System;
using System.Collections;
using S]]></description><category></category></item><item><title><![CDATA[获取FTP服务器目录的方法]]></title><link>https://blog.youkuaiyun.com/hanzy0823/article/details/17278209</link><guid>https://blog.youkuaiyun.com/hanzy0823/article/details/17278209</guid><author>hanzy0823</author><pubDate>Thu, 12 Dec 2013 10:08:37 +0800</pubDate><description><![CDATA[private string[] GetFileList(string path, string ftpUserID, string ftpPassword, string WRMethods)//上面的代码示例了如何从ftp服务器上获得文件列表
        {
            string[] downloadFiles;
            StringBuilder resu]]></description><category></category></item><item><title><![CDATA[FTP下载功能C#]]></title><link>https://blog.youkuaiyun.com/hanzy0823/article/details/17277805</link><guid>https://blog.youkuaiyun.com/hanzy0823/article/details/17277805</guid><author>hanzy0823</author><pubDate>Thu, 12 Dec 2013 09:57:10 +0800</pubDate><description><![CDATA[private bool Download(string[] dir, string fileName, string path, string ftpUserID, string ftpPassword)//下面的代码实现了从ftp服务器下载文件的功能，dir中分别为文件基础路径和下载保存文件名 { try { string filePath = this.basePath + @"\" + d]]></description><category></category></item><item><title><![CDATA[linux系统启动过程]]></title><link>https://blog.youkuaiyun.com/hanzy0823/article/details/12345227</link><guid>https://blog.youkuaiyun.com/hanzy0823/article/details/12345227</guid><author>hanzy0823</author><pubDate>Sun, 06 Oct 2013 14:16:38 +0800</pubDate><description><![CDATA[第一阶段：BIOS启动过程
1、对计算机硬件进行一系列的测试，通常称为加电自检。
2、初始化硬件设备，这对现代基于pci的体系结构是相当重要的，它可以保证所有的硬件设备不会引起IRQ线和I/O端口冲突。
3、搜索一个操作系统启动。实际上，根据BIOS的设置，这个过程可能要试图访问系统中的引导扇区。
4、只要找到一个有效的设备，就把第一扇区的内容拷贝到RAM中从物理地址0x00007c00开]]></description><category></category></item><item><title><![CDATA[linux内核——进程地址空间]]></title><link>https://blog.youkuaiyun.com/hanzy0823/article/details/12321131</link><guid>https://blog.youkuaiyun.com/hanzy0823/article/details/12321131</guid><author>hanzy0823</author><pubDate>Sun, 06 Oct 2013 10:19:17 +0800</pubDate><description><![CDATA[内核的函数以相当直接了当的方式直接获得动态内存，这是因为：
1、内核是操作系统中优先级最高的成分，如果某个内核函数请求动态内存，那么，必定有正当的理由发出那个请求，因此没有道理推迟这个请求。
2、内核信任自己。所有的内核函数假定是没有错的。
当给用户态进程分配内存时情况完全不一样：
1、进程对动态内存的请求被认为不是紧迫的，例如，当进程的可执行文件被装入时，进程并不一定立即对又有的代码页进]]></description><category></category></item><item><title><![CDATA[linux内核-内存管理]]></title><link>https://blog.youkuaiyun.com/hanzy0823/article/details/12303161</link><guid>https://blog.youkuaiyun.com/hanzy0823/article/details/12303161</guid><author>hanzy0823</author><pubDate>Sat, 05 Oct 2013 17:02:32 +0800</pubDate><description><![CDATA[intel的pentium处理器采用的是两种不同大小的页框：4KB和4MB，linux采用4kB页框大小作为标准内存分配单元。主要是因为：
1、由分页单元引起的缺页异常很容易得到解释，或者是由于请求的页存在单不允许进程对其访问，或者是由于请求的页不存在，在第二种情况下，内存分配器必须找到一个4KB的空闲页框，并将其分配给进程。
2、虽然4KB和4MB都是磁盘快的大小的倍数，但是在绝大多数情况下]]></description><category></category></item><item><title><![CDATA[linux内核软中断及tasklet]]></title><link>https://blog.youkuaiyun.com/hanzy0823/article/details/12291431</link><guid>https://blog.youkuaiyun.com/hanzy0823/article/details/12291431</guid><author>hanzy0823</author><pubDate>Fri, 04 Oct 2013 23:16:00 +0800</pubDate><description><![CDATA[在内核执行的几个任务之间有些是不紧急的：在必要情况下他们可以延迟一段时间。一个中断服务程序的几个中断服务例程之间是串行执行的，并且通常在一个中断处理程序结束前，不应该再出现这个中断。相反，可延迟中断可以在开中断的情况下执行。把可延迟的中断从中断处理程序中抽取出来，有助于使内核保持较短的响应时间。
软中断和tasklet有密切关系，tasklet是在软中断之上实现。事实上，出现在内核代码中的术语软]]></description><category></category></item><item><title><![CDATA[linux内核——进程通信]]></title><link>https://blog.youkuaiyun.com/hanzy0823/article/details/12242737</link><guid>https://blog.youkuaiyun.com/hanzy0823/article/details/12242737</guid><author>hanzy0823</author><pubDate>Thu, 03 Oct 2013 23:44:06 +0800</pubDate><description><![CDATA[unix系统提供的进程通信的基本机制：
管道和FIFO：最适合在进程之间实现生产者和消费者的交互。有些进程想管道中写数据，而另外一些进程从管道中读数据。
信号量：资源控制的一种方式
消息：允许进程在预定义消息队列中读和写来交换消息。Linux内核提供两种不同的消息版本System V IPC 消息和POSIX消息一节。
共享内存区：允许进程通过共享内存来交换信息，在必须共享大量数据的时候，]]></description><category></category></item><item><title><![CDATA[linux内核-信号]]></title><link>https://blog.youkuaiyun.com/hanzy0823/article/details/12241243</link><guid>https://blog.youkuaiyun.com/hanzy0823/article/details/12241243</guid><author>hanzy0823</author><pubDate>Wed, 02 Oct 2013 23:04:16 +0800</pubDate><description><![CDATA[信号是很短的消息，可以被发送到一个进程或一组进程组。发送给进程的唯一信息通常是一个数，一次来标识信号。使用信号的两个主要目的是：
让进程知道已经发生了一个特定的事件；
强迫进程执行他自己代码中的信号处理程序。
信号的一个重要特点是他们可以随时发送给状态经常不可预知的进程。发送给非运行进程的信号必须由内核保存，直到进程恢复执行。阻塞一个信号要求信号的传递拖延，知道随后解除阻塞，这使得信号产生一]]></description><category></category></item><item><title><![CDATA[linux内核-进程调度]]></title><link>https://blog.youkuaiyun.com/hanzy0823/article/details/12198045</link><guid>https://blog.youkuaiyun.com/hanzy0823/article/details/12198045</guid><author>hanzy0823</author><pubDate>Wed, 02 Oct 2013 19:53:05 +0800</pubDate><description><![CDATA[调度策略
linux调度基于分时技术：多个进程“时间多路复用”方式运行，因为cpu的时间被分成片，每个可运行进程分配一片。单处理机在任何时刻只能运行一个进程。如果当前运行的时间片到期，进程还没运行完毕，进程切换就发生。调度策略也是根据进程优先级对它们分类。有事复杂的算法求出进程当前的优先级，单最后的结果是相同的：每个进程都与一个值关联，这个值表示进程如何适当的分配给cpu。
在Linux中，进]]></description><category></category></item><item><title><![CDATA[linux内核-内核同步]]></title><link>https://blog.youkuaiyun.com/hanzy0823/article/details/12185989</link><guid>https://blog.youkuaiyun.com/hanzy0823/article/details/12185989</guid><author>hanzy0823</author><pubDate>Mon, 30 Sep 2013 14:45:23 +0800</pubDate><description><![CDATA[内核抢占：如果进程正执行内核函数时，即他在内核态运行，允许发生内核切换，那么这个内核是抢占的。
无论是在抢占或者是非抢占内核中，运行在内核中的进程都可以放弃cpu，比如其原因是，进程由于等待资源而不得不转入睡眠状态。我们把这种进程切换叫做计划性进程切换。但是，抢占内核在响应引起进程切换的异步事件的方式上与非抢占内核是有差别的，我们将把这种进程叫做强制性进程切换。
所有的进程切换都由宏switc]]></description><category></category></item><item><title><![CDATA[linux内核-中断和异常]]></title><link>https://blog.youkuaiyun.com/hanzy0823/article/details/12168077</link><guid>https://blog.youkuaiyun.com/hanzy0823/article/details/12168077</guid><author>hanzy0823</author><pubDate>Mon, 30 Sep 2013 10:02:30 +0800</pubDate><description><![CDATA[中断通常定义为一个事件，该事件改变处理器执行的指令顺序。这个事件与cpu芯片内外部硬件电路产生的电信号相对应。
同步中断：当前指令执行时的有cpu控制单元产生的，之所以成为同步，是因为只有在一条指令结束后才会发出中断。
异步中断：由其他硬件设备依照cpu时钟信号随机产生的。
同步中断和异步中断通常成为异常和中断，异常是有程序的错误产生的，或者是又内核必须处理的异常条件产生的。第一种情况下，内]]></description><category></category></item><item><title><![CDATA[linux内核-进程]]></title><link>https://blog.youkuaiyun.com/hanzy0823/article/details/12156215</link><guid>https://blog.youkuaiyun.com/hanzy0823/article/details/12156215</guid><author>hanzy0823</author><pubDate>Sun, 29 Sep 2013 16:20:21 +0800</pubDate><description><![CDATA[进程是多道程序设计系统的操作系统的基本概念，通常把进程定义为一个程序的执行实例。
进程
程序在一个数据实例上的一次执行过程，资源分配的基本单位
轻量级进程
在计算机操作系统中,轻量级进程（LWP）是一种实现多任务的方法。与普通进程相比，LWP与其他进程共享所有（或大部分）它的逻辑地址空间和系统资源；与线程相比，LWP有它自己的进程标识符，优先级，状态，以及栈和局部存储区，并和其他进程有着父]]></description><category></category></item><item><title><![CDATA[linux内核-内存寻址]]></title><link>https://blog.youkuaiyun.com/hanzy0823/article/details/12144401</link><guid>https://blog.youkuaiyun.com/hanzy0823/article/details/12144401</guid><author>hanzy0823</author><pubDate>Sun, 29 Sep 2013 10:15:00 +0800</pubDate><description><![CDATA[内存地址
程序员偶尔会引用内存地址作为访问内存单元的一种方式，但是，使用X86处理器时，我们必须区分以下三种不同的地址：
逻辑地址：每一个逻辑地址都是由一个段和偏移量组成，偏移量指明了从段开始的地方到实际地址之间的距离。
线性地址：也称虚拟地址，是一个32位无符号整数，可以用来表示4GB的地址，值范围从0x00000000到0xffffffff。
物理地址：用于芯片级单元寻址。它们与微处理]]></description><category></category></item><item><title><![CDATA[unix内核概述-内存管理]]></title><link>https://blog.youkuaiyun.com/hanzy0823/article/details/12143553</link><guid>https://blog.youkuaiyun.com/hanzy0823/article/details/12143553</guid><author>hanzy0823</author><pubDate>Sat, 28 Sep 2013 21:03:58 +0800</pubDate><description><![CDATA[内存管理是最复杂的活动
虚拟内存：所以新近的unix都提供一种有用的抽象叫虚拟内存。虚拟内存作为一种逻辑层，处于应用程序的内存请求与硬件内存管理单元之间，虚拟内存有很多用途和特点：
若干个进程可以并发的执行；
应用程序所需内存大于可用物理内存的时候也可以运行；
程序只有部分代码装入内存是进程可以执行它；
允许每个进程访问可用的物理内存子集；
进程可以共享库函数或程序的一个单独镜像；
]]></description><category></category></item><item><title><![CDATA[unix内核概述-进程管理]]></title><link>https://blog.youkuaiyun.com/hanzy0823/article/details/12135559</link><guid>https://blog.youkuaiyun.com/hanzy0823/article/details/12135559</guid><author>hanzy0823</author><pubDate>Sat, 28 Sep 2013 17:02:17 +0800</pubDate><description><![CDATA[fork（）和_exit（）系统调用分别用来创建一个新进程和终止一个进程，而调用exec类系统调用则是装入一个新程序。这样当一个系统调用执行玩以后，进程就在所装入程序的全新地址空间恢复执行。
调用fork的进程是父进程，而新进程是他的子进程。父子进程能互相找到对方，因为每个进程的描述符都包含有两个指针，一个指向他的父进程，另一个指向他的子进程。
实现fork的一个天真形式就是讲父进程的数据和代]]></description><category></category></item><item><title><![CDATA[unix内核概述-信号与进程间的通信]]></title><link>https://blog.youkuaiyun.com/hanzy0823/article/details/12122009</link><guid>https://blog.youkuaiyun.com/hanzy0823/article/details/12122009</guid><author>hanzy0823</author><pubDate>Sat, 28 Sep 2013 11:02:41 +0800</pubDate><description><![CDATA[unix信号提供了一种把系统事件报告给进程的一种机制。每种事件都拥有自己的信号编号，通常用一个符号常量来表示，例如SIGTERM。有两种系统事件：
异步信号：例如：当用户在终端发送一个中断键，即向前台进程发出一个中断信号SIGINT
同步错误或异常：例如：当进程访问内存非法地址时，内核向这个进程发送一个SIGSEGV信号。
一般来说进程以两种方式对接受到的信号做出反应：
忽略该信号；异步的]]></description><category></category></item><item><title><![CDATA[unix内核概述-同步和临界区]]></title><link>https://blog.youkuaiyun.com/hanzy0823/article/details/12120777</link><guid>https://blog.youkuaiyun.com/hanzy0823/article/details/12120777</guid><author>hanzy0823</author><pubDate>Sat, 28 Sep 2013 10:43:18 +0800</pubDate><description><![CDATA[同步和临界区：
实现可重入内核需要同步机制：如果内核控制路径对某个内核数据结构操作时被挂起，那么其他内核控制路径就不应该再对此数据结构操作，除非它已经设为一致性状态。否则两个控制路径交互执行将破坏所存储的信息。一般来说对全局变量的访问通过原子操作来保证。
非抢占式内核：
这与unix是具有抢占式进程的多处理操作系统并不矛盾。当进程在内核态执行时，他不能被任意挂起，也不能被另一个进程代替。因此]]></description><category></category></item></channel></rss>