Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 74 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
74
Dung lượng
3,72 MB
Nội dung
Th
Th
ự
ự
c
c
h
h
à
à
nh
nh
UNIX/Linux
UNIX/Linux
-
-
ph
ph
ầ
ầ
n
n
2
2
-
-
2.2
Khoa Công ngh
Khoa Công ngh
ệ
ệ
Thông tin
Thông tin
-
-
Đ
Đ
ạ
ạ
i h
i h
ọ
ọ
c B
c B
á
á
ch Khoa Tp. HCM
ch Khoa Tp. HCM
N
N
ộ
ộ
i
i
dung
dung
Biên dịch và thựcthichương trình C/C++
Giớithiệuvề process
Tổ chứccủamột process
Background và foreground process
Các lệnh thao tác với process
Lập trình process với fork(), exec…()
2.3
Khoa Công ngh
Khoa Công ngh
ệ
ệ
Thông tin
Thông tin
-
-
Đ
Đ
ạ
ạ
i h
i h
ọ
ọ
c B
c B
á
á
ch Khoa Tp. HCM
ch Khoa Tp. HCM
Qu
Qu
á
á
tr
tr
ì
ì
nh
nh
t
t
ạ
ạ
o
o
process
process
.c, .cpp, .cc
gas/gcc/g++
.o
gcc/g++
2.4
Khoa Công ngh
Khoa Công ngh
ệ
ệ
Thông tin
Thông tin
-
-
Đ
Đ
ạ
ạ
i h
i h
ọ
ọ
c B
c B
á
á
ch Khoa Tp. HCM
ch Khoa Tp. HCM
B
B
ộ
ộ
công
công
c
c
ụ
ụ
ph
ph
á
á
t
t
tri
tri
ể
ể
n
n
ứ
ứ
ng
ng
d
d
ụ
ụ
ng
ng
GNU
GNU
GNU Compiler Collection (GCC)
Thư việncáchàmtiện ích: libc, libstdc++, …
Các trình biên dịch gcc, g++, gcj, gas, …
Trình khử lỗigdb
Trình tiện ích khác trong binutils như nm, strip, ar, objdump,
ranlib (dùng lệnh info binutils để xem thêm)
Tiệních: gmake
…
2.5
Khoa Công ngh
Khoa Công ngh
ệ
ệ
Thông tin
Thông tin
-
-
Đ
Đ
ạ
ạ
i h
i h
ọ
ọ
c B
c B
á
á
ch Khoa Tp. HCM
ch Khoa Tp. HCM
Tr
Tr
ì
ì
nh
nh
biên
biên
d
d
ị
ị
ch
ch
GNU C/C++
GNU C/C++
Công cụ dùng biên dịch các chương trình C/C++
Quá trình biên dịch thành file thựcthigồm 4 giai đoạntheothứ
tự như sau:
1. preprocessing (tiềnxử lý)
2. compilation (biên dịch)
3. assembly (hợpdịch)
4. linking (liên kết)
Ba bước 1, 2, 3 chủ yếulàmviệcvớimộtfile đầuvào
Bước4 cóthể liên kết nhiều object module liên quan để tạo
thành file thực thi nhị phân (executable binary)
Lậptrìnhviêncóthể can thiệpvàotừng bước ở trên ☺
2.6
Khoa Công ngh
Khoa Công ngh
ệ
ệ
Thông tin
Thông tin
-
-
Đ
Đ
ạ
ạ
i h
i h
ọ
ọ
c B
c B
á
á
ch Khoa Tp. HCM
ch Khoa Tp. HCM
GNU C/C++ compiler (
GNU C/C++ compiler (
gcc/g
gcc/g
++)
++)
.c,.cc
.c,.cc
source codes
.cpp
gcc -E hello.c -o hello.cpp
e.g. hello.c
hello.cpp
hello.o
preprocessed
source files
object
code
gcc -x assembler -c hello.s [-o hello.o]
b.o
a.o
.s
gcc -x cpp-output -S hello.cpp [-o hello.s]
assembly
source code
a.out/hello
gcc -S hello.c [-o hello.s]
gcc a.o b.o hello.o [-o hello]
gcc -c hello.c [-o hello.o]
gcc hello.c [-o hello]
executable
binary
2.7
Khoa Công ngh
Khoa Công ngh
ệ
ệ
Thông tin
Thông tin
-
-
Đ
Đ
ạ
ạ
i h
i h
ọ
ọ
c B
c B
á
á
ch Khoa Tp. HCM
ch Khoa Tp. HCM
T
T
ó
ó
m
m
t
t
ắ
ắ
t
t
m
m
ộ
ộ
t
t
s
s
ố
ố
t
t
ù
ù
y
y
ch
ch
ọ
ọ
n
n
c
c
ủ
ủ
a
a
gcc
gcc
Tùy chọn Công dụng
-o FILE
Chỉđịnh tên của file output (khi biên dịch thành file thựcthi, nếu không
có -o filename thì tên file mặc định sẽ là a.out)
-c Chỉ biên dịch mà không linking (i.e. chỉ tạo ra object file *.o)
-I
DIRNAME
Chỉ tên thư mục
DIRNAME
là nơichứa các file header (.h) mà gcc sẽ tìm
trong đó(mặc định gcc sẽ tự tìm ở các thư mụcchuẩn/usr/include, …)
-L
DIRNAME
Chỉ tên thư mục
DIRNAME
là nơichứacácthư viện (.a, .so) mà gcc sẽ tìm
trong đó(mặc định gcc sẽ tự tìm ở các thư mụcchuẩn/usr/lib, …)
-O [n] Tối ưumãthựcthitạo ra (e.g. -O2, -O3, hoặc-O)
-g Chèn thêm mã phụcvụ công việcdebug
-E Chỉ thựchiệnbướctiềnxử lý (preprocessing) mà không biên dịch
-S Chỉ dịch sang mã hợpngữ chứ không linking (i.e. chỉ tạo ra file *.s)
-lfoo Link với file thư việncótênlàlibfoo (e.g. -lm, -lpthread)
-ansi Biên dịch theo chuẩn ANSI C/C++ (sẽ cảnh báo nếu code không chuẩn)
2.8
Khoa Công ngh
Khoa Công ngh
ệ
ệ
Thông tin
Thông tin
-
-
Đ
Đ
ạ
ạ
i h
i h
ọ
ọ
c B
c B
á
á
ch Khoa Tp. HCM
ch Khoa Tp. HCM
Biên
Biên
d
d
ị
ị
ch
ch
chương
chương
tr
tr
ì
ì
nh
nh
C/C++
C/C++
File main.c
#include <stdio.h>
#include "reciprocal.h"
int main (int argc, char **argv)
{
int i;
i = atoi (argv[1]);
printf ("The reciprocal of %d is %g\n", i, reciprocal (i));
return 0;
}
2.9
Khoa Công ngh
Khoa Công ngh
ệ
ệ
Thông tin
Thông tin
-
-
Đ
Đ
ạ
ạ
i h
i h
ọ
ọ
c B
c B
á
á
ch Khoa Tp. HCM
ch Khoa Tp. HCM
Biên
Biên
d
d
ị
ị
ch
ch
chương
chương
tr
tr
ì
ì
nh
nh
C/C++ (
C/C++ (
t.t
t.t
)
)
File reciprocal.h
extern double reciprocal (int i);
File reciprocal.c
#include <assert.h> /* some debug routines here */
#include "reciprocal.h"
double reciprocal (int i) {
assert (i != 0); /* used for debugging */
return 1.0/i;
}
2.10
Khoa Công ngh
Khoa Công ngh
ệ
ệ
Thông tin
Thông tin
-
-
Đ
Đ
ạ
ạ
i h
i h
ọ
ọ
c B
c B
á
á
ch Khoa Tp. HCM
ch Khoa Tp. HCM
Biên
Biên
d
d
ị
ị
ch
ch
chương
chương
tr
tr
ì
ì
nh
nh
C/C++ (
C/C++ (
t.t
t.t
)
)
Biên dịch (không link) mộtfile chương trình nguồnC đơnlẻ
gcc -c main.c
Kếtquả là object file tên main.o
Biên dịch (không link) file chương trình nguồnC++
g++ -c myprog.cpp
Kếtquả là file object tên là myprog.o
Biên dịch (không link) main.c có sử dụng các file *.h trong thư
mục include/ (dùng tùy chọn-I để chỉđịnh đường dẫn)
gcc -c -I /include reciprocal.c
Biên dịch (không link) có tối ưumã
gcc -c -O2 main.c
Biên dịch có kèm thông tin phụcvụ debug => kích thướcfile
output lớn
gcc -g reciprocal.c
[...]... - Đại học Bách Khoa Tp HCM nghệ Đạ họ Bá 2. 24 Kết thúcthực thi foreground process Dùng tổ hợp phím Ctrl-C Ví dụ: $find / -name “*.ps” -print ^C Khoa Công nghệ Thông tin - Đại học Bách Khoa Tp HCM nghệ Đạ họ Bá 2. 25 Tạm hoãn thực thi foreground process Dùng tổ hợp phím: Ctrl-Z Process tương ứng chuyển sang trạng thái suspended Ví dụ $ find / “*.profile” -print ^Z [1]+ Stopped find / ".profile" -print... các file object có dùng tùy chọn -fPIC $ gcc -c -fPIC a.c b.c 2 Tạo thư viện liên kết động tên là libab.so $ gcc -shared -fPIC -o libab.so a.o b.o 3 Có thể dùng lệnh file để xem file libab.so là loại file gì $ file libab.so libab.so: ELF 3 2- bit LSB shared object, Intel 80386, version 1 (SYSV), not stripped Khoa Công nghệ Thông tin - Đại học Bách Khoa Tp HCM nghệ Đạ họ Bá 2. 18 Các loại thư viện lập trình... Thông tin - Đại học Bách Khoa Tp HCM nghệ Đạ họ Bá 2. 29 Quản lý background process Liệt kê các job đang hoạt động - dùng lệnh jobs $jobs -l [1] + 3584 Running xterm -g 90x55 [2] - 3587 Running xterm -g 90x55 Đối với các quá trình, có thể: Có thể chuyển process từ thực thi background sang foreground và ngược lại dùng lệnh fg hoặc bg Kết thúc một quá trình (~ một job) Khoa Công nghệ Thông tin - Đại học... /usr/local/lib/somelib gcc -o myapp main.o -L/usr/local/lib/somelib -lutility - Liên kết với thư viện libtest.so ở thư mục làm việc hiện hành gcc -o myapp main.o -L -ltest Khoa Công nghệ Thông tin - Đại học Bách Khoa Tp HCM nghệ Đạ họ Bá 2. 11 Biên dịch chương trình C/C++ (t.t) Lưu ý khi biên dịch trong Linux Dùng g++ nếu chương trình có chứa mã C lẫn C++ Dùng gcc nếu chương trình chỉ có mã C File thực thi tạo ra không... /lib/ld-linux.so .2 => /lib/ld-linux.so .2 (0x40000000) Trong thư mục hiện tại có 2 thư viện là libab.a và libab.so Khi đó, linker sẽ ưu tiên liên kết thư viện so trước Muốn chỉ định buộc linker tiến hành liên kết tĩnh với thư viện libab.a thì thêm tùy chọn -static $ mv libab.so libab.so.old $ gcc -static -o myapp myapp.c -L -lab $ /myapp Ke^'t qua? du`ng ha`m func1 7 Khoa Công nghệ Thông tin - Đại học Bách Khoa... tĩnh libab.a $ gcc myapp.c /tmp/cc2dMic1.o: In function `main': /tmp/cc2dMic1.o(.text+0x7): undefined reference to `func1' collect2: ld returned 1 exit status Biên dịch có link đến thư viện tĩnh libab.a $ gcc -o myapp myapp.c -L -lab hoặc gcc -o myapp myapp.c libab.a $ /myapp Ke^'t qua? du`ng ha`m func1: 7 Khoa Công nghệ Thông tin - Đại học Bách Khoa Tp HCM nghệ Đạ họ Bá 2. 17 Các loại thư viện lập trình... -print $ps PID TTY TIME CMD 27 50 pts/1 00:00:00 bash 28 81 pts/1 00:00:00 find 28 83 pts/1 00:00:00 ps Khoa Công nghệ Thông tin - Đại học Bách Khoa Tp HCM nghệ Đạ họ Bá 2. 26 Tạm hoãn thực thi foreground process (t.t) Sau khi bị tạm hoãn thực thi bằng ^Z, chúng ta có thể dùng lệnh ps để xem Một lệnh tiện ích khác hiển thị thông tin này là jobs Nếu muốn cho process tiếp tục thực thi foreground, dùng lệnh... nghệ Đạ họ Bá 2. 21 Cơ bản về PROCESS Process: chương trình đang thực thi User có thể theo dõi trạng thái của process, tương tác với process Có hai loại user process chủ yếu trong hệ thống Foreground process Background process Các “process” thực hiện các công việc của hệ điều hành còn gọi là các kernel_thread, daemon Khoa Công nghệ Thông tin - Đại học Bách Khoa Tp HCM nghệ Đạ họ Bá 2. 22 Theo dõi các... job_number) Ví dụ: $ls -R / > kq & [1] 29 59 $jobs [1]+ Running ls -R / >kq & $ fg 1 Khoa Công nghệ Thông tin - Đại học Bách Khoa Tp HCM nghệ Đạ họ Bá 2. 32 Kết thúc quá trình Dùng lệnh kill kill [-signal] process_identifier (PID) Cần dùng lệnh ps trước để biết PID của quá trình Có thể dùng lệnh đơn giản như sau: kill process_identifier kill -9 or process_identifier Khoa Công nghệ Thông tin - Đại học Bách Khoa... có g++ -o myapp main.o reciprocal.o gcc -o myapp main.o reciprocal.o Tên file tạo ra là gì ? Cho biết quyền hạn trên file đó ? Thực thi tại dấu nhắc lệnh: $ /myapp 3 Liên kết object files với các thư viện (libraries) khác - Liên kết với thư viện chuẩn POSIX pthread (/usr/lib/libpthread.so) gcc -o myapp main.o -lpthread - Liên kết với thư viện libutility.a ở thư mục /usr/local/lib/somelib gcc -o myapp . Th
Th
ự
ự
c
c
h
h
à
à
nh
nh
UNIX/Linux
UNIX/Linux
-
-
ph
ph
ầ
ầ
n
n
2
2
-
-
2. 2
Khoa Công ngh
Khoa Công ngh
ệ
ệ
Thông tin
Thông tin
-
-
Đ
Đ
ạ
ạ
i h
i h
ọ
ọ
c. /usr/local/lib/somelib
gcc -o myapp main.o
-L/usr/local/lib/somelib -lutility
-Liênkếtvớithư viện libtest.so ở thư mụclàmviệchiệnhành
gcc -o myapp main.o -L . -ltest
2. 12
Khoa