C++多核高级编程 - 03 操作系统的角色和任务
来源:互联网 发布:淘宝怎么查消费总额 编辑:程序博客网 时间:2024/04/28 01:27
1, 操作系统的角色
操作系统的作用主要有2个:
- 软件接口: 为计算机的硬件资源定义提供一致且定义良好的接口。
- 资源管理:管理硬件资源以及其他正在执行的应用软件,作业和程序。
1-1 提供一致的接口
操作系统出现之前程序员必须要熟悉特定的指令集和每个设备的特性。显卡,磁盘驱动,打印机等都有完全不同的指令集,而且不同厂商的指令集也不一样。程序很难有通用性。操作系统的概念改变了这一切,它封装了设备的内部结构,是程序员可以通过简单的API和SPI来实现对硬件设备的控制。真正对于硬件的操作则由操作系统来完成。
1-2 管理硬件资源和其他应用软件
操作系统将控制程序的进程或线程,访问处理器,内存,IO端口,中断和存储器。在多数环境中,在任意时刻都会有多个程序正在被执行或等待被执行。由于处理器,内存等资源有限,操作系统必须决定哪个程序使用哪个处理器,使用时间和调度策略。操作系统为进程分配硬件资源,并且避免进程间的相互侵犯。
1-3 开发人员与操作系统的交互
操作系统为多线程或多处理的应用程序提供了不同层次的支持,层次越低开发人员需要掌握的技巧和知识就越复杂。
r
1-4 操作系统的核心服务
下表简单的介绍了操作系统的核心服务,虽然他与所有的应用程序开发有关,但对于多线程程序来讲则更为明显。
2, 分解以及操作系统的任务
任务的分解对于软件的开发意义重大。
- 软件的基本活动是将问题和解决方案按某种方式分解,并在软件中加以体现。
- 并行编程,多线程,多处理都要求将软件分解为可以由操作系统调度,从而可被并发处理的执行单元。
一个多线程程序任务分解的例子:
此图主要描述了如何从一个问题映射成一多线程的程序
3, 隐藏操作系统的任务
隐藏操作系统任务的真正目标是在软件设计不需要陷入到进程和线程实现细节的前提下,理解在执行多线程和多处理程序中操作系统的作用。CMP发展的终极方向是多个内核位于一芯片上,终极目标是芯片上有成百上千个内核大规模的并行,了解操作系统的任务很重要,但是没人希望在设计软件的过程中接触这部分细节。
例子:利用C++封装POSIX API 的一种设计想法
编译命令: c++ -o test.o main.cpp thread_object.cpp user_thread.cpp -lrt -lpthread
main.cpp
#include "thread_object.h"int main(){ user_thread worker[2]; worker[0].name("W1"); worker[1].name("W2"); worker[0].m_sleep_timer = 1; worker[1].m_sleep_timer = 3; worker[0].run(); worker[1].run(); worker[0].join(); worker[1].join(); return 0;}
thread_object.h
#include <pthread.h>#include <iostream>#include <string>#ifndef __THREAD_OBJECT_H__#define __THREAD_OBJECT_H__using namespace std;class thread_object{public: thread_object(); ~thread_object(); void run(void); void join(void); void name(string str); string name(void); friend void* thread(void *param);protected: virtual void do_something(void) = 0;private: pthread_t m_tid; string m_name; };class user_thread: public thread_object{public: user_thread(); ~user_thread(); int m_sleep_timer;protected: virtual void do_something(void);};#endif
thread_object.cpp
#include "thread_object.h"#include <unistd.h>user_thread::user_thread(){ cout << "Create a user thread object"<< endl;}user_thread::~user_thread(){ cout << "Delete a user thread object" <<endl;}void user_thread::do_something(void){ for (;;) { cout << "Thread:" << name() << " is working" << endl; sleep(m_sleep_timer); }}
user_thread.cpp
#include "thread_object.h"thread_object::thread_object(){};thread_object::~thread_object(){ pthread_join(m_tid, NULL);}void thread_object::run(void){ pthread_create(&m_tid, NULL, thread, this);}void thread_object::join(void){ cout << "Join Thread: " << m_tid << endl; pthread_join(m_tid, NULL);}void thread_object::name(string str){ m_name = str;}string thread_object::name(){ return m_name;}void* thread(void* param){ thread_object* oThread; oThread = static_cast<thread_object *>(param); oThread->do_something(); return NULL;}
- C++多核高级编程 - 03 操作系统的角色和任务
- C++多核高级编程 - 06 并发任务的通信和同步(1) 通信和同步
- C++多核高级编程 - 06 并发任务的通信和同步(2) 对并发进行同步
- C++多核高级编程 - 02 并行程序设计中系统的任务及挑战
- C++多核高级编程 - 06 并发任务的通信和同步(3) 线程的策略方法及工作的分解和封装
- C++多核高级编程 - 08 并行程序的测试
- 多核编程中的任务随机竞争模式的概率分析
- 多核编程中的任务随机竞争模式的概率分析
- 多核编程中的任务随机竞争模式的概率分析
- 多核编程中的任务随机竞争模式的概率分析
- 多核编程中的任务随机竞争模式的概率分析
- 多核编程中的任务随机竞争模式的概率分析
- 多核编程中的任务随机竞争模式的概率分析
- 多核编程中的任务随机竞争模式的概率分析
- 多核编程中的任务随机竞争模式的概率分析
- 多核编程中的任务随机竞争模式的概率分析
- 多核编程中的任务随机竞争模式的概率分析
- 多核编程中的任务随机竞争模式的概率分析
- linux下/proc目录的作用
- 在Delphi的脚本里调用返回值为复合类型的webservice
- 简单的程序诠释C++ STL算法系列之十九:replace
- 别从析构函数往外抛异常
- 关于电子、计算机的课程
- C++多核高级编程 - 03 操作系统的角色和任务
- 《Linux完全参考手册(第6版)》学习札记(2)
- vmware 8,VMware Workstation 8.0.2下载,中文版,注册机迅雷高速下载
- 高精度定时器在mips上的框架结构
- 基于.net的COM与COM+编程
- asmlinkage
- 进程通信方式总结
- C#一个数组的实现
- Android的NDK开发(3)————JNI数据类型的详解