嵌入式Linux期末复习重点:操作系统与内核解析

需积分: 10 1 下载量 163 浏览量 更新于2024-09-21 收藏 36KB DOC 举报
"这份资料是关于Linux的期末复习材料,适合操作系统初学者,涵盖了嵌入式实时操作系统的基本概念、Linux内核、用户进程、进程状态、虚拟文件系统、中断处理等方面的知识。" 在Linux的学习中,首先要理解的是嵌入式系统的基本概念。嵌入式系统是设计用于特定用途的计算机系统,它强调应用需求,同时考虑硬件和软件的可定制性,以满足成本、体积和功耗等方面的严格要求。这些系统通常包括硬件平台、操作系统和应用程序。硬件平台涵盖多种处理器架构,如ARM、PowerPC、Xscale和MIPS等。嵌入式操作系统则在这些硬件上运行,例如嵌入式Linux、CLinux、WinCE、C/OS-Ⅱ和VxWorks等。实时操作系统(RTOS)如QNX、pSOS、vxworks和RT-Linux提供了更高级别的实时性能。 Linux内核是其核心组成部分,负责关键功能如进程调度、内存管理、虚拟文件系统、网络接口和进程间通信。在Linux中,用户进程由进程控制块、系统堆栈、用户堆栈、程序代码和数据段构成。系统可以同时管理多达512个进程,进程调度策略包括SCHED_OTHER、SCHED_FIFO和SCHED_RR。进程有五种状态:就绪、可中断等待、不可中断等待、停止(僵尸)和中止。Linux支持普通进程和实时进程的调度。 虚拟文件系统(VFS)是Linux的一大特色,它抽象出一个统一的接口来访问各种不同的文件系统,如yaffs、jffs和cramfs。挂载文件系统需要用到mount命令,卸载则使用umount。交换机制是通过页面替换确保内存的有效利用,Linux采用三级分页结构来实现这一功能。 中断处理在Linux中至关重要,中断处理程序分为上半部和下半部。外部中断由设备触发,中断服务例程则是处理器响应中断时执行的代码。中断处理的分离设计旨在提高效率,确保快速响应中断事件。 最后,进程间的通信是Linux系统中多任务协作的基础,包括信号、管道、套接字、共享内存等机制,使得不同进程能够协调工作,完成复杂的任务。 这份复习资料详尽地涵盖了Linux操作系统的关键知识点,对于准备Linux期末考试或入门学习者来说,是一份宝贵的参考资料。
2015-06-12 上传
opengl 期末复习资料 第一、二章: 1、 OpenGL中能渲染的基本元素是什么?GLU 可以渲染哪些基本元素? 第三章 2、 用框图说明OpenGL的渲染流程,并简要说明每个坐标系。 第四、五章 3、 写出OpenGL中局部光照的方程,要包含的系数有光源参数、材料参数、聚光灯的参数、衰减参数等,方程要表示是多个光源的。 4、 分析程序并计算 请看下面的一段程序,并计算三个顶点○1、○2和○3处的光照的颜色值。 void init(void) { GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat mat_shininess[] = { 50.0 }; GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel (GL_SMOOTH); //glLightModelf(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE); //glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); } void display(void) { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBegin(GL_TRIANGLES); glNormal3f(..); ○1glVertex3f(1.0, 0.0, 0.0); ○2glVertex3f(0.0, 1.0, 0.0); ○3glVertex3f(0.0, 0.0, 1.0); glEnd(); glFlush (); } void reshape (int w, int h) { glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity(); if (w <= h) glOrtho (-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w, 1.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0); else glOrtho (-1.5*(GLfloat)w/(GLfloat)h, 1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void keyboard(unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100); glutCreateWindow (argv[0]); init (); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; } 第9章 在OpenGL中,使用纹理的步骤是什么?纹理坐标和纹理都可以通过程序计算出来,自动生成纹理的原理是什么? 第10章 帧缓存有几种,什么叫片元,片元的测试和操作有哪些? 明白stencilbuffer的使用。 用stencilbuffer编程实现一个功能。 5、 采用GPU编程,请说明Vertex Shader 和 Fragment Shader 的输入输出坐标系是什么? 输入输出的主要参数是什么? 如何实现Multi-Pass 渲染? 6、 在一个坐标系W中,光源的位置为 (0, 0, 200, 1.0),设模型为一个以(1.0, 0.0, 0.0), (0.0, 1.0, 0.0), (0.0, 0.0, 1.0)为三个点的三角形,另一个模型是以(0, 0, 10)为中心,长度为2的一个正方体,如何实现该正方体在三角形平面上的阴影?如何使用OpenGL函数来实现?要求在照相机改变时,该程序应该仍然有效。 7、 如何实现纹理的反走样?说明其原理。 8、 写出场景的反走样算法,并说明其原理。 9、 如何实现采用立方体映射实现的环境映射,写出立方体映射的生成算法和把其作为环境映射时显示的程序。 10、 请列举出3种以上的三维模型常见的表示格式,已知一个立方体环境映射对应的六个面上的图片,分别假定为X_POSITVIE_PIC, X_NEGATIVE_PIC, Y_POSITIVE_PIC, Y_NEGATIVE_PIC, Z_POSITIVE_PIC, Z_NEGATIVE_PIC,请用OBJ格式表示一个长度为1的立方体,并把每个面分别贴上给定的六个图片。 11、 分析下面的程序并计算 在下面的例子中,计算对应○1○2○3○4四个顶点所对应的四边形上的一个点(-1.0, 0.5, 0.0)对应的纹理坐标是多少?按照最近邻域滤波方法,该点对应的颜色是什么? /* Create checkerboard texture */ #define checkImageWidth 64 #define checkImageHeight 64 static GLubyte checkImage[checkImageHeight][checkImageWidth][4]; #ifdef GL_VERSION_1_1 static GLuint texName; #endif void makeCheckImage(void) { int i, j, c; for (i = 0; i < checkImageHeight; i++) { for (j = 0; j < checkImageWidth; j++) { c = ((((i&0x8)==0)^((j&0x8))==0))*255; checkImage[i][j][0] = (GLubyte) c; checkImage[i][j][1] = (GLubyte) c; checkImage[i][j][2] = (GLubyte) c; checkImage[i][j][3] = (GLubyte) 255; } } } void init(void) { glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel(GL_FLAT); glEnable(GL_DEPTH_TEST); makeCheckImage(); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); #ifdef GL_VERSION_1_1 glGenTextures(1, &texName); glBindTexture(GL_TEXTURE_2D, texName); #endif glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); #ifdef GL_VERSION_1_1 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage); #else glTexImage2D(GL_TEXTURE_2D, 0, 4, checkImageWidth, checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage); #endif } void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); #ifdef GL_VERSION_1_1 glBindTexture(GL_TEXTURE_2D, texName); #endif glBegin(GL_QUADS); ○1glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0); ○2glTexCoord2f(0.0, 1.0); glVertex3f(-2.0, 1.0, 0.0); ○3glTexCoord2f(1.0, 1.0); glVertex3f(0.0, 1.0, 0.0); ○4glTexCoord2f(1.0, 0.0); glVertex3f(0.0, -1.0, 0.0); glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 0.0); glTexCoord2f(0.0, 1.0); glVertex3f(1.0, 1.0, 0.0); glTexCoord2f(1.0, 1.0); glVertex3f(2.41421, 1.0, -1.41421); glTexCoord2f(1.0, 0.0); glVertex3f(2.41421, -1.0, -1.41421); glEnd(); glFlush(); glDisable(GL_TEXTURE_2D); } void reshape(int w, int h) { glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 30.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0, 0.0, -3.6); } void keyboard (unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; default: break; } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(250, 250); glutInitWindowPosition(100, 100); glutCreateWindow(argv[0]); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; } Deferred shading 原理