- 博客(26)
- 收藏
- 关注
原创 操作系统学习笔记——生产者与消费者,读者和写者
i. 生产者生产一条数据1. 首先查看缓冲区能否放入数据,有没有空的位置,如果有往下执行,否则说明缓冲区全满了,消费者可能干什么去了没有来取数据,所以生产者阻塞等待资源,当一定的时候被唤醒(有空的了)。在此处,生产者如果发现缓冲区已经满了,生产者阻塞在此处。2. 之后查看临界区是否可用(有没有进程在临界区),否则必须等待使用权,当
2012-04-29 15:13:42 1560
原创 操作系统学习笔记——进程互斥与同步
1. 并发控制l 当并发进程使用同一资源时,他们会发生冲突。l 如果操作系统将资源分配给其中的某一个使用,另一个进程必须等待,直到申请的资源可用时,由操作系统分配给它。l 如果竞争资源的进程太多,这些进程必须等待在一个队列里,如就绪队列,阻塞队列。l 死锁的话,阻塞进程永远得不到申请的资源。2. 竞争资源l 竞争资源受限必须解决“互斥”问题。某些资源必
2012-04-29 15:12:19 1402
原创 操作系统学习笔记——线程
1. 多线程l 操作系统引入进程的目的是,为了描述和实现多个程序的并发执行,以改善资源利用率级提高系统的吞吐量。l 为什么引入线程?为了减少程序并发执行时系统所付出的额外开销,使操作系统具有更好的并发性。l 进程的两个属性n 进程是一个拥有资源的独立单位;n 进程同时又是一个可以独立调度的基本单位。2. 系统为进程进行的操作(进程带来的开销)
2012-04-29 15:11:00 5517
原创 操作系统学习笔记——进程控制
三 进程控制1. 两种执行模式l 系统模式(系统态,控制模式,内核模式):n 具有较高的特权。n 运行系统特定的指令,包括读/写控制寄存器的指令,基本I/O指令以及与存储器管理有关的指令,及一些特定的内存区。n 内核模式下的处理机及其指令、寄存器和内存收受到完全控制和保护l 用户模式(或用户态):n 具有较低的特权。n 用户程序一般运行在用户模式。
2012-04-29 15:09:59 1014
原创 操作系统学习笔记——进程的状态
1. 为什么要分开就绪和阻塞状态 答:因为就绪态只需要等待处理机,而阻塞态可能在等待输入输出,即使分配给处理机也是徒劳,所以两状态图不妥。对于调度进程,只需要等待就绪队列里的进程,因为阻塞状态可以转换到就绪队列里去。 2. 进程五状态 1) 新状态:进程已经创建,但未被OS接纳为可执行进程。(还没有申请到相应的资源)。2)
2012-04-29 15:09:23 1991
原创 操作系统学习笔记—— 进程的概述
包括进程的概述、进程的状态、进程控制。参考书目:操作系统精髓与设计中文版第五版,操作系统(汤子赢) 进程的概述1. 进程的概念l 定义:可并发执行的程序,在一个数据集合上的运行。l 申请/拥有资源~调度资源(线程)l 程序:静态概念,是指令和数据的集合,可上期存储l 进程与程序对应关系n 一个程序可以对应一个进程或多个进程n 一个进程可以对应
2012-04-29 15:07:20 656
转载 getopt的用法
转自: http://www.cnitblog.com/zouzheng/archive/2007/04/02/25034.htmlgetopt被用来解析命令行选项参数。就不用自己写东东处理argv了。#include extern char *optarg; //选项的参数指针extern int optind, //下一次调用getopt的时,从optind存储的位置
2012-04-19 16:44:35 505
转载 strlen和sizeof的区别
一、sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的
2012-04-17 15:17:40 489
原创 Thinking in c++学习笔记 5,6
第5章 隐藏实现1. 设置限定 Cstruct无法控制客户程序员进行特殊的行为,无法控制客户程序员操作struct里的函数2. C++访问权限控制 public成员:任何人都可以访问。类似于struct。 private成员:只有自己可以访问,任何人都不可以访问,private是设计者与客户程序员之间的
2012-04-15 19:21:42 2061
转载 char 与 unsigned char的本质区别
http://www.cnblogs.com/qytan36/archive/2010/09/27/1836569.html在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别 首先在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,
2012-04-14 19:18:47 683
原创 I/O重定向和管道:使用pipe、fork、exec详解。
I/O重定向和管道:使用pipe、fork、exec详解。要使who|sort用程序实现,需进行I/O重定向,参考了Unix/Linux编程实践教程,画了几个图来理解这个程序,可能会更好。1. 当运行pipe(pipe_id)以及fork之后,父进程和子进程共享stdin、stdout和管道,如图所示:2. 我们知道,可以设定子进程写,父进程读,也就是子进程执行w
2012-04-10 21:03:42 11016
转载 unix编程学习路线图
http://hi.baidu.com/tkblue/blog/item/98aef5cade45fb42f21fe795.html建议学习路径: 首先先学学编辑器,vim, emacs什么的都行。然后学make file文件,只要知道一点就行,这样就可以准备编程序了。 然后看看《C程序设计语言》K&R,这样呢,基本上就可以进行一般的编程了,顺便找本数据结构的书来看。
2012-04-03 13:30:20 2477
原创 查找最小的k个元素(数组)
题目:输入n个整数,输出其中最小的k个。例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。 以下内容转自:http://zhedahht.blog.163.com/blog/static/2541117420072432136859/分析:这道题最简单的思路莫过于把输入的n个整数排序,这样排在最前面的k个数就是最小的k个数。只是
2012-03-20 21:39:25 621
原创 在二元树中找出和为某一值的所有路径(树)
题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如 输入整数22和如下二元树 10 / / 5 12 / / 4 7则打印出两条路径:10, 12和10, 5, 7。二元树节点的数据结构定义为:struct BinaryTreeNode
2012-03-20 21:02:59 1972
原创 求子数组的最大和
#include #include using namespace std;const int SIZE = 1024;int main(){ int n, cnt = 0; int array[SIZE]; int maxarray[SIZE]; int beg = 0, last = 0; memset(array, 0, sizeof(array[0]) * SIZE
2012-03-20 19:14:56 564
原创 计算n bit的整数中有多少bit 为1
例如“7”,里面有3个1:111;移位,位运算比较方便。n & (n-1),那么二进制n从右往左第一个1变为0;#include using namespace std;int main(){ int n; while(cin >> n) { int cnt = 0; /* while(n) { if(n & 1 == 1) cnt++;
2012-03-14 20:21:59 813
转载 腾讯实习生电面记录
问题涉及:C++三大特性 const三种情况 模板的用法 stl容器 遍历 数据结构栈 特定情况下的最高效排序 多线程程序 搜索,索引的概念 linux如何查看CPU 内存 怎样安装程序项目经验 技术专长C++的基本知识知道,但涉及到继承,多态类,如果没做过项目什么的,没什么概念,排序追求效率,往往空间换时间STL容器常用了ve
2012-03-14 20:06:27 826
原创 将一个句子按单词反序
将一个句子按单词反序。比如 “My name is daydayup”,反序后变为 “daydayup is name My”。算法:首先将整个字符串逆置,然后对每个单词求逆#include #include #include using namespace std;const int SIZE = 100;void swap(char &a, char &b){
2012-03-14 19:35:21 2640
原创 Linux多线程概念
1. 多线程与进程的区别(优点) 1). 和进程相比,它是一种比较“节俭”的多任务操作方式。在Linux系统中,启动一个新的进程,必须分配给它独立到地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种昂贵的多任务工作方式。 2). 线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过进程间通信的方式进行,这种方式不仅费
2012-03-13 11:28:06 581
原创 1024! 末尾有多少个0?
末尾0的个数取决于乘法中因子2和5的个数。显然乘法中因子2的个数大于5的个数,所以我们只需统计因子5的个数。是5的倍数的数有: 1024 / 5 = 204个是25的倍数的数有:1024 / 25 = 40个是125的倍数的数有:1024 / 125 = 8个是625的倍数的数有:1024 / 625 = 1个所以1024! 中总共有204+40+8+1=253个因子5。也
2012-03-12 20:14:46 608
原创 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
#include #include #include #include #include using namespace std;int rand5(){//随机生成[1-5]之间的随机数return (rand() % 5 + 1);}int rand7_1(){//随机生成[1-7]之间的随机数int a;while((a = rand5() * 5 + ra
2012-03-12 20:14:14 2609
原创 编程实现两个正整数的除法,当然不能用除法操作符
这道题目,怎么说呢,其实算法还是很好理解的,常规的想,100/7,可以试着7*1, 7*2, 7*3, ... ,7*14做,但这样子太慢了。于是有人说以2的指数次递增,也就是7*1,7*2,7*4,7*8,好了,因为7*16>100,所以这个时候就100-7*8=44接着下一次循环。可以这里理解了。100 = 7 * 8 + 7 * 6 + 2.有人说可以二分??不知道怎么二。。上界如何
2012-03-12 20:13:34 2043
原创 在排序数组中,找出给定数字的出现次数
在排序数组中,找出给定数字的出现次数,比如 [1, 2, 2, 2, 3] 中2的出现次数是3次。算法:借鉴了stl里面的equal_range算法,关键是处理好边界,二分问题#include #include #include #include using namespace std; int low(vector &ivec, int left
2012-03-12 20:12:47 2063
原创 删除字符串中多余的空格
给定字符串,删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。比如 “ I like http://blog.csdn.net/yake25 ” 会变成 "I like http://blog.csdn.net/yake25"。#include #include #include using namespace std; const int
2012-03-12 20:11:38 812
原创 Fedora 16安装MPlayer 播放器
1. su -c 'rpm -Uvh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm' su -c 'rpm -Uvh http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-
2012-03-12 20:10:29 1030
原创 Fedora安装Nidia显卡驱动
官网安装: 1.下载显卡驱动。我的显卡nvidia GeForce 210 下载地址http://drivers.mydrivers.com/drivers/320-128119-NVIDIA-GeForce6-GeForce7-GeForce8-GeForc/ 2.解压unzip nvidia_gf_19042_linux32.zip,修改属性chmod +x
2012-03-12 20:09:46 966
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人