Unix/Linux操作系统与多线程深入探索

需积分: 9 28 下载量 138 浏览量 更新于2024-08-16 收藏 4.7MB PPT 举报
"该资源是达内教育机构的Linux课件,主要讲解了Unix/Linux操作系统的核心编程知识,包括操作系统简介、GCC编译工具、内存管理、文件I/O、进程管理、信号处理、进程间通信、多线程以及网络通信等内容。课件中还涉及了Unix的派生版本如System V、Berkley和Hybrid,以及Linux的概述和其在不同设备上的应用。" 详细知识点: 1. **Unix/Linux操作系统**: - Unix操作系统起源于1971年的PDP-11计算机,由贝尔实验室的开发团队创建。 - Unix有三个主要的派生版本:System V、Berkley和Hybrid。System V派系包括AIX、Solaris、HP-UX和IRIX等商业操作系统。Berkley派系则有FreeBSD、NetBSD和OpenBSD等开源系统,其中MacOS X也是基于Berkley的FreeBSD源代码构建的。 - **Linux** 是一个开放源码的类Unix操作系统,其核心是Linux内核,可以广泛应用于各种硬件设备,从嵌入式设备到超级计算机。 2. **GNU编译工具GCC**: - GCC(GNU Compiler Collection)是GNU项目的关键组成部分,它是一套跨平台的编译器,用于将源代码编译为可执行程序。 3. **内存管理**: - 在Unix/Linux中,内存管理涉及内存分配、释放、地址映射等,对于优化系统性能至关重要。 4. **文件I/O**: - Unix/Linux系统提供了丰富的文件操作接口,包括读、写、打开、关闭、追加等,支持文本和二进制模式。 5. **进程管理**: - 包括进程创建、销毁、进程间通信、信号处理等,如fork()、exec()、wait()和signal()函数。 6. **进程间通信(IPC)**: - 包括管道、消息队列、共享内存、信号量(如mutex)等机制,用于进程间的协同工作。 7. **多线程**: - Unix/Linux系统支持多线程编程,允许在一个进程中同时执行多个线程,提升程序并发性能。 8. **网络通信**: - 提供socket编程接口,支持TCP/IP协议和其他网络协议,实现进程间的网络通信。 9. **Unix派生版本**: - System V派系:商业性强,如AIX、Solaris等。 - Berkley派系:以FreeBSD为代表,强调自由软件和开源。 - Hybrid:包括Minix和Linux,Minix是一个小型的类Unix系统,而Linux则是一个广泛应用的开源操作系统。 10. **Linux的广泛应用**: - Linux不仅在服务器领域广泛应用,还在移动设备、嵌入式系统、物联网设备以及高性能计算等领域占据主导地位。 这个课件内容覆盖了Linux系统编程的多个重要方面,适合对Unix/Linux操作系统底层原理和编程感兴趣的学员深入学习。

#include <stdio.h> #include <sys/types.h> #include <unistd.h> #include <sys/shm.h> #include <pthread.h> #define SHM_PATH "/mnt/hgfs" struct mt { int num; pthread_mutex_t mutex; pthread_mutexattr_t mutexattr; }; int main () { int iRet=0; unsigned nMemSize=sizeof(struct mt); struct mt *pMt; int iShm_id=0; key_t key =ftok(SHM_PATH, 0); iShm_id=shmget(key,nMemSize,0660|IPC_CREAT); printf("key :iShmID = %d:%d ",key, iShm_id); if(iShm_id<0) { iRet=-1; perror("shmget failed "); return iRet; } pMt = (struct mt*)shmat(iShm_id, NULL, 0); if (-1 == (long)pMt) { perror("shmat addr error "); return -1; } pMt->num=0; pthread_mutexattr_init(&pMt->mutexattr); //???mutex???? pthread_mutexattr_setpshared(&pMt->mutexattr, PTHREAD_PROCESS_SHARED); //?????????? pthread_mutex_init(&pMt->mutex, &pMt->mutexattr); //?????mutex? pid_t child_pid; printf ("the main program process ID is %d ", (int) getpid ()); child_pid = fork (); if (child_pid != 0) { int i=0; int iTmp=0; for (i = 0; i < 1000; i++) { pthread_mutex_lock(&pMt->mutex); iTmp=(pMt->num); printf("-parent----num++ %d ", pMt->num); pMt->num=iTmp+1; pthread_mutex_unlock(&pMt->mutex); usleep(1000); } if (0!= shmdt((void*)pMt)) { perror("shmdt addr error "); return -1; } } else { int i=0; int iTmp=0; for (i = 0; i < 1000; i++) { pthread_mutex_lock(&pMt->mutex); iTmp=(pMt->num); printf("*******************child----num++ %d ", pMt->num); pMt->num=iTmp+1; pthread_mutex_unlock(&pMt->mutex); usleep(1000); } if (0!= shmdt((void*)pMt)) { perror("shmdt addr error "); return -1; } } return 0; }

2023-06-08 上传