《symbian开发培训symbian系统简介.ppt》由会员分享,可在线阅读,更多相关《symbian开发培训symbian系统简介.ppt(36页珍藏版)》请在三一办公上搜索。
1、Symbian系统简介,概述,Symbian系统结构Symbian线程Symbian内存管理Window ServerSymbian系统性能优化S60版本差异分析,Symbian系统结构,EKA2介绍Symbian系统模块Symbian硬件模块,EKA2简史,EPOC8操作系统1984年第一款Psion掌上电脑诞生基于8位处理器封闭式操作系统EPOC161990年开发完成支持Intel8086 CPU提供了基于C语言的软件接口 带来了诸多问题,EKA2简史(2),EKA1 EPOC32_11997年Psion S5掌上电脑32位操作系统设计中考虑到了硬件平台移植性硬件移植性问题未得到根本解决新
2、硬件的支持必须对内核代码从新编译EKA22003年开发完成并被手机厂商应用将硬件平台特性与内核彻底分离,EKA2特性,系统模块化单用户系统实际硬件几乎一致的模拟器支持单核移动通讯平台更好的内存管理更灵活的设备驱动程序结构,Symbian系统模块,Nanokernel初始内核提供最基本的功能来启动GSM信号栈硬件中断派发者Symbian OS内核线程与进程管理动态库调用等等、,Symbian系统模块(2),ASSP和variant硬件驱动LDD:逻辑硬件驱动程序PDD:物理硬件驱动程序ExtensionsEUSERFile ServerWindow Server,Symbian硬件模块,Base
3、band Processor(BP)手机modem管理SIM卡管理通话相关声音控制Application Processor(AP)Symbian系统功能部分,Symbian硬件模块(2),Symbian硬件(数据存储),RAM:读写最快,成本高SDRAM:低电耗,速度是RAM的1/4Flash:成本低,读写相对较慢NOR FlashNAND Flash,线程与进程,线程执行(Execution)的最小单位时间分片的受载体进程线程的集合所属线程共享同段物理内存和其他系统资源,用户模式线程,iUserStackRunAddress,iSupervisorStack,Nano-Thread,用户栈
4、,内核栈,Symbian线程分类,初始线程系统启动时第一个创建的线程在系统中是唯一的内核线程只存在于内核模式用户线程大部分时间在用户模式,线程创建,RThread:Creat-DThread:Creat(SThreadInfo,线程状态,CreatedDeadReadyWaitSemaphoreWaitSemaphoreSuspendedWaitMutexWaitMutexSuspendedHoldMutexPending,Symbian线程-Cleanup队列,每个线程拥有一个Cleanup队列class TThreadCleanup:public TPriListLinkpublic:IM
5、PORT_C TThreadCleanup();void ChangePriority(TInt aNewPriority);IMPORT_C void Remove();virtual void Cleanup()=0;public:DThread*iThread;,线程同步对象,信号量(Semaphore)标准信号量机制Wait:计数器减,如果计数器为负,线程等待Signal:计数器加,如果不为负,下一个等待线程开始运行互斥(Mutex)用于多个线程共享资源可多次复用,线程同步对象(2),Condition Variable用于等待某共享资源达到某一条件时触发须与互斥联合使用避免Polli
6、ng,提高效率RConVar类,线程同步对象(3),Condition Variables实例:发送线程与接受线程共享消息队列发送线程在队列满时阻塞接收线程在消息空时阻塞mutex.Wait();while(queue.empty()condvar.Wait(mutex);mutex.Signal,线程间通讯,ClientServer消息队列(Message Queues)异步消息传递机制Publish/Subscribe用户层和内核层数据交互机制Shared Chunk线程间内存共享,Publish/Subscribe,IdentityTypeSecurity,1 WORD/多字节,cate
7、gory,key,写,读,Publisher,Subscriber,Publisher,TFileName n;RProcess().Filename(n);TInt r=RProperty:Set(KMyPropertyCat,EMyPropertyName,n);User:LeaveIfError(r);/retrieve the first 10 characters of the name valueTBuf name;r=RProperty:Get(KMyPropertyCat,EMyPropertyName,name);if(r!=KErrOverflow)User:LeaveIf
8、Error(r);/retrieve and publish a new value using the attached counter/propertyTInt count;r=counter.Get(count);if(r=KErrNone)r=counter.Set(+count);User:LeaveIfError(r);,Subscriber,void CPropertyWatch:RunL()/resubscribe before processing new value to prevent/missing updatesiProperty.Subscribe(iStatus)
9、;SetActive();/property updated,get new valueTFileName n;if(iProperty.Get(n)=KErrNotFound)/property deleted,do necessary actions here.NameDeleted();else/use new value.,RHeap,简单的内存分配实现在一块线形内存区域里分块管理内存分配与释放算法简单,但效率不是最好有内存碎片的问题,导致效率下降,Window Server,两大功能屏幕显示管理系统事件管理,Window Tree,Root Window树的起点每个Screen De
10、vice都会有一个Group Window窗口分组的起始节点不直接参与显示Top Client WindowClient Windows,Window类,Direct screen access,绘制不经过Window Server有可能污染屏幕上其他的窗口CDirectScreenAccess实例,效率优化,优化目标程序自身执行速度程序对外部事件的响应速度优化方法避免小循环优化通用代码减少小调用线程优先级调整内存管理优化,避免小循环,TInt trivial_checksum(TInt8*aBlock,TInt aLen)TInt i=0;TInt8*j;for(j=aBlock;jaBlo
11、ck+aLen;j+)i+=*j;return i;,慢,避免小循环,TInt trivial_checksum_unrolled(TInt8*aBlock,TInt aLen)TInt i=0;TInt8*j,endptr;endptr=aBlock+aLen;for(j=aBlock;jendptr;)if(jendptr)i+=*j+;elsebreak;if(jendptr)i+=*j+;elsebreak;if(jendptr)i+=*j+;elsebreak;if(jendptr)i+=*j+;elsebreak;Return 1;,快,线程优先级调整,将执行代码分段处理常用或耗时的任务调高优先级将单线程改为多线程处理以空间换时间,内存管理优化方法,对重要执行代码避免进行动态内存分配,改以程序启动时分配静态内存替换RHeap算法固定大小内存块,提高分配速度,S60版本差异分析,S60版本差异分析(2),