Tải bản đầy đủ (.pdf) (33 trang)

lab2 slide operator system

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (646.82 KB, 33 trang )

Faculty of Computer Science and Engineering
Ho Chi Minh City University of Technology

CO2018
Operating Systems

C programming
Autumn, 2016

Nguyen Duc Hai


Objective
• Understand how to compile a C project
• Get familiar with Makefile
• Enhance C programing skills

Autumn 2016

FACULTY OF COMPUTER SCIENCE AND ENGINEERING
HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY

2


Compilation
• How to create an executable file from a single source file?
// hello.c
#include <stdio.h>
int main() {
printf(“Hello, world!”);


}

Autumn 2016

FACULTY OF COMPUTER SCIENCE AND ENGINEERING
HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY

3


Compilation
• How to create an executable file from a single source file?

Preprocessor
hello.i

Autumn 2016

// hello.c
#include <stdio.h>
int main() {
printf(“Hello, world!”);
}

FACULTY OF COMPUTER SCIENCE AND ENGINEERING
HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY

4



Compilation
• How to create an executable file from a single source file?

Preprocessor
hello.i

// hello.c
#include <stdio.h>
int main() {
printf(“Hello, world!”);
}

Compiler

hello.s

Autumn 2016

FACULTY OF COMPUTER SCIENCE AND ENGINEERING
HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY

5


Compilation
• How to create an executable file from a single source file?

Preprocessor
hello.i


// hello.c
#include <stdio.h>
int main() {
printf(“Hello, world!”);
}

Compiler

hello.s

Autumn 2016

Assembler

hello.o

FACULTY OF COMPUTER SCIENCE AND ENGINEERING
HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY

6


Compilation
• How to create an executable file from a single source file?

Preprocessor
hello.i

// hello.c
#include <stdio.h>

int main() {
printf(“Hello, world!”);
}

Compiler

hello.s

Autumn 2016

We need the implementation
of printf from this file

libc.a
Assembler

hello.o

FACULTY OF COMPUTER SCIENCE AND ENGINEERING
HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY

Linker

a.out

7


Compilation
• How to create an executable file from multiple source files?

• Suppose we have five files (you can find them in source code directory in Resource
page at Sakai):






main.c
swap.h
swap.c
rev.h
rev.c

 Compile source code first then link all of them together

Autumn 2016

FACULTY OF COMPUTER SCIENCE AND ENGINEERING
HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY

8


Compilation
• How to create an executable file from multiple source files?
main.c

Translators
(cpp, cc1, as)

main.o

Autumn 2016

swap.c

rev.c

Translators
(cpp, cc1, as)

Translators
(cpp, cc1, as)

swap.o

rev.o

FACULTY OF COMPUTER SCIENCE AND ENGINEERING
HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY

9


Compilation
• How to create an executable file from multiple source files?
main.c

Translators
(cpp, cc1, as)

main.o

libc.a

Autumn 2016

swap.c

rev.c

Translators
(cpp, cc1, as)

Translators
(cpp, cc1, as)

swap.o

rev.o

Linker (ld)

FACULTY OF COMPUTER SCIENCE AND ENGINEERING
HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY

prg

10



Makefile
• How to compile source code efficiently?
• Reduce compilation time
• Portable

Autumn 2016

FACULTY OF COMPUTER SCIENCE AND ENGINEERING
HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY

11


Makefile
• How to compile source code efficiently?
main.c

rev.h
swap.h

prg

rev.c

swap.c

Autumn 2016

FACULTY OF COMPUTER SCIENCE AND ENGINEERING
HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY


12


Makefile
• How to compile source code efficiently?
all: main.o swap.o rev.o
gcc main.o swap.o rev.o –o prg

main.c

rev.h

main.o

swap.h

swap.o

rev.c

rev.o

prg

swap.c

Autumn 2016

FACULTY OF COMPUTER SCIENCE AND ENGINEERING

HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY

13


Makefile
• How to compile source code efficiently?
all: main.o swap.o rev.o
gcc main.o swap.o rev.o –o prg

main.c

rev.h

main.o

swap.h

swap.o

rev.c

rev.o

main.o: main.c rev.h
gcc –c main.c
prg

swap.c


Autumn 2016

FACULTY OF COMPUTER SCIENCE AND ENGINEERING
HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY

14


Makefile
• How to compile source code efficiently?
all: main.o swap.o rev.o
gcc main.o swap.o rev.o –o prg

main.c

rev.h

main.o

swap.h

swap.o

rev.c

rev.o

main.o: main.c rev.h
gcc –c main.c
prg


swap.o: swap.c swap.h
gcc –c swap.c

swap.c

Autumn 2016

FACULTY OF COMPUTER SCIENCE AND ENGINEERING
HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY

15


Makefile
• How to compile source code efficiently?
all: main.o swap.o rev.o
gcc main.o swap.o rev.o –o prg

main.c

rev.h

main.o

swap.h

swap.o

rev.c


rev.o

main.o: main.c rev.h
gcc –c main.c
prg

swap.o: swap.c swap.h
gcc –c swap.c
rev.o: rev.c rev.h swap.h
gcc –c rev.c

swap.c

Autumn 2016

FACULTY OF COMPUTER SCIENCE AND ENGINEERING
HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY

16


Makefile
• How to compile source code efficiently?
all: main.o swap.o rev.o
gcc main.o swap.o rev.o –o prg

main.c

rev.h


main.o

swap.h

swap.o

rev.c

rev.o

swap.c

Autumn 2016

main.o: main.c rev.h
gcc –c main.c
prg

swap.o: swap.c swap.h
gcc –c swap.c
rev.o: rev.c rev.h swap.h
gcc –c rev.c

Change!
FACULTY OF COMPUTER SCIENCE AND ENGINEERING
HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY

17



Makefile
• How to compile source code efficiently?
all: main.o swap.o rev.o
gcc main.o swap.o rev.o –o prg

main.c

rev.h

main.o

swap.h

swap.o

rev.c

rev.o

main.o: main.c rev.h
gcc –c main.c
prg

swap.o: swap.c swap.h
gcc –c swap.c
rev.o: rev.c rev.h swap.h
gcc –c rev.c

swap.c


Autumn 2016

FACULTY OF COMPUTER SCIENCE AND ENGINEERING
HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY

18


Makefile
• How to compile source code efficiently?
main.c

We do not recompile this file because
its dependencies do not change

rev.h

main.o

swap.h

swap.o

rev.c

rev.o

all: main.o swap.o rev.o
gcc main.o swap.o rev.o –o prg

main.o: main.c rev.h
gcc –c main.c

prg

swap.o: swap.c swap.h
gcc –c swap.c
rev.o: rev.c rev.h swap.h
gcc –c rev.c

swap.c

Autumn 2016

FACULTY OF COMPUTER SCIENCE AND ENGINEERING
HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY

19


C Programming Exercise
• The value of exp1 and exp2?
float a = 1e20;
float b = -1e20;
float c = 3.14;

exp1 = (a + b) + c;
exp2 = a + (b + c);

Autumn 2016


FACULTY OF COMPUTER SCIENCE AND ENGINEERING
HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY

20


C Programming Exercise
• The value of exp1 and exp2?
float a = 1e20;
float b = -1e20;
float c = 3.14;

exp1 = (1e20 – 1e20) + 3.14 = 3.14
exp2 = a + (b + c);

Autumn 2016

FACULTY OF COMPUTER SCIENCE AND ENGINEERING
HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY

21


C Programming Exercise
• The value of exp1 and exp2?
float a = 1e20;
float b = -1e20;
float c = 3.14;


exp1 = (1e20 – 1e20) + 3.14 = 3.14
exp2 = 1e20 + (-1e20 + 3.14) = 1e20–1e20 = 0

Autumn 2016

FACULTY OF COMPUTER SCIENCE AND ENGINEERING
HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY

22


C Programming Exercise
• What is the value of exp in following expression:
unsigned int a = 1; // assume unsigned int is 4-byte long
unsigned long exp;

// assume unsigned long is 8-byte long

exp = (a << 32);
exp = (unsigned long)(a << 32);
exp = (unsigned long)a << 32;

Autumn 2016

FACULTY OF COMPUTER SCIENCE AND ENGINEERING
HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY

23



C Programming Exercise
• What we will see on the screen if the following lines of code are executed
int x = -1;
unsigned int y = 0;
if (x < y) {
printf(“Hello\n”);

} else {
printf(“world”);
}

Autumn 2016

FACULTY OF COMPUTER SCIENCE AND ENGINEERING
HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY

24


C Programming Exercise
• Assume A is an array of integer, we have pointer int* p = A, determine
the equivalent expression in terms of A referencing (e.g. *(p + 1) = A[1])
*(p + 7)

p[10]
*(&p[2] + 4)
*(&(*p) + 2)
*(p – 1)

Autumn 2016


FACULTY OF COMPUTER SCIENCE AND ENGINEERING
HO CHI MINH CITY UNIVERSITY OF TECHNOLOGY

25


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×