LittleHat

我的技术小站

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  0 Posts :: 9 Stories :: 1 Comments :: 0 Trackbacks

常用链接

留言簿

我参与的团队

搜索

  •  

最新随笔

最新评论

原来fork()是一个COPY进程的过程,新建的进程共享它父进程的所有储存区(包括了代码段的内存空间和数据段,这样当两个进程是由同一个执行文件创建的,那么就没必要再浪费内存了),复制当然也包括虚拟内存,因为虚拟内存是很难复制的,用写时复制技术,它把进程的PAGE设置为只读(目的在于后面产生违归写操作),只有当进行写操作的时候,就触发页错误,调用do_wp_page()试图来解决这个错误,从而申请了新内存空间来创建新的虚拟内存。

    但是进程间怎么能实现互不干扰呢? 原因是当进行写操作时,产生异常中断,复制共享页面,再取消对该页的共享,这样就实现了互不干扰.


    但又有一个问题出来,如果不只两个进程共享该页的话,这样做必定影响第三个进程的共享,怎么办?

    所以,我想这也是为什么进程要有“实”和“虚”之分。

    一切始源于点,而这个点就是init()了,从BSP把权利交给start()后,进程就被创建出来了。
  
    唉~   在这里叹息一下中国的翻译家们~


进程包括代码和资源,一个进程可以产生很多线程,很多书上说线程就相当与操作.可以把它看做类的行为或者接口,而资源就是封装在类中的变量,主线程就是基类,其他线程就可以看作是派生类,共享着基类的资源.但是进程之间又可以共享资源,这一点不同与类了~~
    第一次接触到线程的应用.

    感觉就和对象差不多(虽然他们两者没一点可比性,但是也许这样比较好理解些) 呵呵~~  

pthread_t thread1, thread2;//定义两个线程
char *message1 = "Hello"; 
char *message2 = "Wo r l d " ;
pthread_create( &thread1, pthread_attr_default,
(void*)&print_message_function, (void*) message1);//调用线程
pthread_create(&thread2, pthread_attr_default,
(void*)&print_message_function, (void*) message2);



    "其实我们很少直接使用共享内存,实际上除非性能上有特殊要求,更愿意采用socket或者管道作为进程间通信的方式。但我们常常间接的使用共享内存,动态库的优点是,多个应用程序可以公用。如果每个应用程序都加载一份共享库到内存中,显然太浪费了。所以操作系统把共享库放在共享内存中,让多个应用程序共享。另外,同一个应用程序运行多个实例时,也采用同样的方式,保证内存中只有一份可执行代码。这样的共享内存是设为只读属性的,防止应用程序无意中破坏它们。当调试器要设置断点时,相应的页面被拷贝一分,设置为可写的,再向其中写入断点指令。这些事情完全由操作系统等底层软件处理了,应用程序本身无需关心。"

很透彻的一段话  贴在这里备用

posted on 2007-05-11 19:37 小帽子 阅读(100) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航:   博客园   博客园最新博文   博问   管理