Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
C Module System C and Data Structures Baojian Hua [email protected] Software System is Large Practical software systems tend to be large and complex: Linux kernel consists of ~1000K LOC So the general principals in designing large (even small) software systems are: dividing into manageable smaller ones separating specification (interface) from code (implementation) Module System Different styles of module systems in languages: ML signature and structure Java interface and class C (C++) header files (.h) and C files (.c) We show, in this slide, how to manage C’s module system: source programs (separate) compiling, linking, loading and tools Typical C Program Organization Program … file1 function1 … functionm filen function1 … functionn General Process // Take MS cl as example, the process from source // files (.c .h) to executables (.exe): 1.c 1.i 1.obj 2.c 2.i 2.obj … … … n.c n.i n.obj preprocessing Compiling libraries a.exe linking Example // area.h #ifndef AREA_H #define AREA_H double area (int r); #endif // area.c #include “area.h” double area (int r) { double pi = 3.14; double f = pi *r *r; return f; } // main.c #include “area.h” … Preprocessing Take source files (.c .h), generate intermediate files (.i) file inclusion Macro substitution comments removal … afterwards, no header file needed any more See demo … Compiling Generate binary object files (.obj) object files in assembly or binary may involve several intermediate phases analysis optimizations … See demo … Linking Object files often called relocatable they are incomplete Linking the process of linking all object files together function names, extern variables, etc. resolve reference to external entities See demo … Linking // Object files are incomplete: // main.obj call area call printf Linking // Resolve external references: // area.obj area: // main.obj call area call printf … // printf.obj printf: … What are Libraries? Libraries just are pre-written pre-compiled object files Normally offered by the compiler company Header files are available For user program linking purpose Ex: stdio.h, stdlib.h, ctype.h, …, from C standard library Source code available (ex: gcc), or unavailable (ex: cl) Same linking technique, but … How to Implement Libraries? In order to familiarize you with libraries implementation techniques and others, we next study carefully an example stdio.h Our goal is to examine the printf function: int printf (const char *format, …); General Strategy User program call the library function printf () printf () internally makes operating system call to do the real work details vary on different OS OS calls hardware driver user program libraries: printf() OS routine Offered by hardware company hardware driver Case Study: Linux vs Windows fwrite () user program fwrite () user program write () int 0x80 write () NtWriteFile () int 0x2e sys_write () Kernel IoWriteFile () Kernel API & SDK Application programming interface (API) a set of routines that nicely wrap up operating system calls on which, libraries are built standard C libraries, runtime, etc. Why API? Software Development Kit (SDK) A collection of APIs header, libraries, files, and tools Varies on different Windows version Runtime Runtime is a special set of libraries For program startup and exit get system info libraries preparation, etc. Normally NOT for called by user program Again, vary between different systems