1 / 85

Thực hành Unix, Linux (2) Ngô Thanh Nguyên Bộ môn Hệ thống và Mạng máy tính

Thực hành Unix, Linux (2) Ngô Thanh Nguyên Bộ môn Hệ thống và Mạng máy tính Khoa Khoa học và kỹ thuật máy tính Email: ntnguyen@cse.hcmut.edu.vn. Nội dung. Biên dịch và thực thi chương trình C/C++ Cơ bản về process Tổ chức của một process

kezia
Download Presentation

Thực hành Unix, Linux (2) Ngô Thanh Nguyên Bộ môn Hệ thống và Mạng máy tính

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Thực hành Unix, Linux (2) Ngô Thanh Nguyên Bộ môn Hệ thống và Mạng máy tính Khoa Khoa học và kỹ thuật máy tính Email: ntnguyen@cse.hcmut.edu.vn Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  2. Nội dung • BiêndịchvàthựcthichươngtrìnhC/C++ • Cơ bản về process • Tổ chức của một process • Background và foreground process • Các lệnh thao tác với process • Lập trình với process • Sử dụng Makefile Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  3. Nội dung • BiêndịchvàthựcthichươngtrìnhC/C++ • Giớithiệuvề process • Cơbảnvề process • Background và foreground process • Cáclệnhthaotácvới process • Lậptrìnhvới process • Sử dụng Makefile Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  4. Quá trình tạo process Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  5. Bộcôngcụpháttriểnứngdụng 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ỗi: gdb • Trìnhtiệníchkháctrongbinutilsnhưnm, strip, ar, objdump, ranlib(dùnglệnhinfo binutilsđểxemthêm) • Tiện ích: gmake • … Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  6. Trìnhbiêndịch GNU C/C++ • CôngcụdùngbiêndịchcácchươngtrìnhC/C++ • Quátrìnhbiêndịchthànhfile thựcthigồm4 giaiđoạntheothứtựnhưsau: • preprocessing (tiềnxửlý) • compilation (biêndịch) • assembly (hợpdịch) • linking (liênkết) • Babước1, 2, 3 chủyếulàmviệcvớimộtfile đầuvào • Bước4 cóthểliênkếtnhiềuobject module liênquanđểtạothànhfile thựcthinhịphân(executable binary) • Lậptrìnhviêncóthểcan thiệpvàotừngbướcởtrên Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  7. GNU C/C++ compiler (gcc/g++) Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  8. Tómtắtmộtsốtùychọncủagcc Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  9. Biên dịch chương trình C/C++ File main.c #include <stdio.h> #include "reciprocal.h" int main (intargc, char **argv) { inti; i = atoi(argv[1]); printf("The reciprocal of %d is %g\n“,i,reciprocal(i)); return 0; } Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  10. Biên dịch chương trình C/C++ File reciprocal.h extern double reciprocal(inti); File reciprocal.c #include <assert.h> /* some debug routines here */ #include "reciprocal.h" double reciprocal(inti){ assert (i != 0); /* used for debugging */ return 1.0/i; } Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  11. Biên dịch chương trình C/C++ • Biêndịch(khônglink) mộtfile chươngtrìnhnguồnC đơnlẻ gcc -c main.c • Kếtquảlà object file tênmain.o • Biêndịch(khônglink) file chươngtrìnhnguồnC++ g++ -c myprog.cpp • Kếtquảlà file object tênlàmyprog.o • Biêndịch(khônglink) cósửdụngcácfile *.h trongthưmụcinclude/ gcc -c -I ../include reciprocal.c • Biêndịch(khônglink) cótốiưumã gcc -c -O2 main.c • Biêndịchcókèmthôngtin phụcvụdebug => kíchthướcfile output lớn gcc -g reciprocal.c Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  12. Biên dịch chương trình C/C++ • Liênkết(link)nhiềufile đốitượng(object files) đãcó g++ -o myappmain.oreciprocal.o gcc -o myappmain.oreciprocal.o • Tênfile tạoralàgì? Chobiếtquyềnhạntrênfile đó? • Thựcthitạidấunhắclệnh: $./myapp 3 • Liênkếtobject files vớicácthưviện(libraries) khác • LiênkếtvớithưviệnchuẩnPOSIX pthread(/usr/lib/libpthread.so) gcc -o myappmain.o –lpthread • Liênkếtvớithưviệnlibutility.aởthưmục/usr/local/lib/somelib gcc -o myappmain.o -L/usr/local/lib/somelib –lutility • Liênkếtvớithưviệnlibtest.soởthưmụclàmviệchiệnhành gcc -o myappmain.o -L. -ltest Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  13. Biên dịch chương trình C/C++ • Lưuý khibiêndịchtrongLinux • Dùngg++ nếuchươngtrìnhcóchứamãC lẫnC++ • DùnggccnếuchươngtrìnhchỉcómãC • File thựcthitạorakhôngcóđuôi.exe, .dllnhưmôitrườngWindows • Giảsửứngdụngcủabạngồmnhiềuhơnmộtfile source code, (e.g. main.cvàreciprocal.c). Đểtạothànhchươngtrìnhthựcthi, bạncóthểbiêndịchtrựctiếpbằngmộtlệnhgccnhưsau: gcc -o myappmain.creciprocal.c • Cáchlàmthủcôngnhưtrênsẽbấttiệnvàkhônghiệuquảkhiứngdụnggồmquánhiềufile (khoảng>10 files ???) • ThamkhảothêmcôngcụrấthữuíchlàGNU make Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  14. Thư viện lập trình trong Linux Chobiếtưuvàkhuyếtđiểmcủastatically vs. dynamically linking? Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  15. ThưviệnlậptrìnhtrongLinux Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  16. Các loại thư viện lập trình • Thưviệnliênkếttĩnh (static library) • Làtậphợpcácfile object tạothànhmộtfile đơnnhất • Tươngtựfile .LIB trênWindows • Khibạnchỉđịnhliênkếtứngdụngcủamìnhvớimộtstatic library thìlinker sẽtìmtrongthưviệnđóđểtríchxuấtnhữngfile object màbạncần. Sauđó, linker sẽtiếnhànhliênkếtcácfile object đóvàochươngtrìnhcủabạn. • Thưviệnliênkếtđộng(dynamic, shared library) • Tươngtựthưviệndạng.DLL củaWindows • Thưmụcchứathưviệnchuẩn • /usr/lib, /lib Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  17. Tạothưviện liên kết tĩnh • Giảsửbạncóhai file mãnguồnchứahàmlàa.cvàb.c Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  18. Tạothưviện liên kết tĩnh • Tạothưviệntĩnhtênlàlibab.a • Biên dịch tạo các file object $gcc -c a.c b.c • Dùnglệnharđểtạothànhthưviệntĩnhtênlàlibab.a $ar cr libab.a a.o b.o • Cóthểdùnglệnhnm đểxemlạikếtquả $nm libab.a • Cóthểdùnglệnhfile đểxemfile libab.alàloạifile gì $file libab.a Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  19. Dùng thư viện liên kết tĩnh • Tạoứngdụngđơngiảncósửdụnghàmthưviệntronga.c myapp.c int main(){ printf("Ket qua dung ham func1: %d\n", func1()); exit(0); } • Biêndịchkhôngcólink thưviệntĩnhlibab.a $gcc –o myapp myapp.c /tmp/cc2dMic1.o: In function `main': /tmp/cc2dMic1.o(.text+0x7): undefined reference to `func1' collect2: ld returned 1 exit status • Biêndịchcólink đếnthưviệntĩnhlibab.a $gcc -o myappmyapp.c -L. -labhoặc $gcc -o myappmyapp.clibab.a $./myapp Ket qua dung ham func1: 7 Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  20. Tạo thư viện liên kết động • Tạothưviệnliênkếtđộnglibab.sotừa.cvàb.c • Biên dịch tạo các file object có dùng tùy chọn –fPIC $gcc -c –fPIC a.c b.c • Tạothưviệnliênkếtđộngtênlàlibab.so $gcc -shared –fPIC -o libab.so a.o b.o • Cóthểdùnglệnhfile đểxemfile libab.solàloạifile gì $file libab.so libab.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), not stripped Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  21. Dùng thư viện liên kết động • Tạoứngdụngvớifile myapp.cnhưvídụtrước • Biêndịchkhônglink vớithưviệnđộnglibab.so $gccmyapp.c /tmp/cc2dMic1.o: In function `main’: /tmp/cc2dMic1.o(.text+0x7): ndefined reference to ‘func1' collect2: ld returned 1 exit status • Biêndịchcólink đếnthưviệnđộnglibab.so $ gcc -o myappmyapp.c -L. -lab hoặc$gcc -o myappmyapp.clibab.so $./myapp ./myapp: error while loading shared libraries: libab.so: cannot open shared object file: No such file or directory Tạisao??? Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  22. Dùng thư viện liên kết động • Nguyênnhân: do loader tìmtrongthưmụcthưviệnchuẩnnhư/usr/lib, /lib khôngcólibab.so!!! • Cáchgiảiquyết(cũnglàcáchdùngđểtriểnkhai, mộtứngdụngcósửdụngthưviệnliênkếtđộng) • Nếucóđủquyềnhạn(e.g. root) thìcopy cácfile thưviệnchiasẻvào thưmụcchuẩn #cp libab.so /lib $./myapp Ket qua dung ham func1: 7 • Nếukhôngcóđủquyềnhạncopy file vàothưmụcchuẩn, user phảithayđổibiếnmôitrườngLD_LIBRARY_PATH đểchỉcholoader tìmtrongthưmụcchứathưviện. $export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:. $./myapp Ket qua dung ham func1: 7 Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  23. Dùng thư viện liên kết động • Mộtsốchúý khilậptrìnhvớithưviệnliênkếtđộng • Kiểmtraxemứngdụngcuốicùngcủamìnhtạoraphụthuộcvàocácthưviệnliênkếtđộngnàobằnglệnhldd. Nếubịthiếuthưviệnthìphảikhắcphụctheo2 cáchởtrên $lddmyapp libab.so=>not found libc.so.6=>/lib/i686/libc.so.6(0x42000000) /lib/ld-linux.so.2 (0x40000000) • Trongthưmụchiệntạicó2thưviệnlàlibab.avàlibab.so. Khiđó, linker sẽưutiênliênkếtthưviện.so trước. Muốnchỉđịnhbuộclinker tiếnhànhliênkếttĩnhvớithưviệnlibab.athìthêmtùychọn–static $mvlibab.solibab.so.old $gcc –static –o myappmyapp.c –L. –lab $./myapp Ket qua dung ham func1: 7 Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  24. Nội dung • BiêndịchvàthựcthichươngtrìnhC/C++ • Giớithiệuvề process • Cơbảnvề process • Background và foreground process • Cáclệnhthaotácvới process • Lậptrìnhvới process • Sử dụng Makefile Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  25. Cơ bản về process • Process:chươngtrìnhđangthựcthi. • User cóthểtheodõitrạngtháicủaprocess, tươngtácvớiprocess • Có hai loại user process trong hệ thống • Foreground process • Background process • Các“process”thựchiệncáccôngviệccủahệđiềuhànhcòngọilàcáckernel_thread, daemon Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  26. Theo dõi các process • Xem trạng thái các process (process status) ps [option] • Options • -e chọn tất các process • -f liệt kê tất cả (full) các thuộc tính • -A liệt kê tất cả processs • … Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  27. Background và foreground process • Background process • Không có giao diện • Không thể tương tác trực tiếp với chương trình • Chạy nhiều process cùng lúc • Foreground process • Có giao diện • Tương tác trực tiếp với chương trình • Chờ process kết thúc mới chạy được process khác Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  28. Thực thi foreground process • Khigõlệnhtươngứngvớitênchươngtrìnhtheocáchthôngthường • Khiclick vàoicon trêngiaodiệnđồhoạtươngứngvớichươngtrình. • Foreground process tươngtácđượcvớingườidùngqua thiếtbịnhậpchuẩnlàbànphím. • Kếtxuấtcủachươngtrìnhchủyếulàthiếtbịxuấtchuẩnlàmànhình. • Trình thông dịch lệnh sẽ bị blocked cho tới khi foreground process kếtthúc Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  29. Kết thúc thực thi foreground process • Dùng tổ hợp phím Ctrl-C • Ví dụ $find / -name “*.ps” -print ... ... ^C Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  30. Tạm hoãn thực thi foreground process • Dùng tổ hợp phím: Ctrl-Z • Process tươngứngchuyểnsang trạngtháisuspended • Ví dụ $find / “*.profile” -print ... ^Z [1]+ Stopped find / “*.profile” –print $ps PID TTY TIME CMD 2750 pts/1 00:00:00 bash 2881 pts/1 00:00:00 find 2883 pts/1 00:00:00 ps Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  31. Tạm hoãn thực thi foreground process (2) • Saukhibịtạmhoãnthựcthibằng^Z, chúngtacóthểdùnglệnhpsđểxem. Mộtlệnhtiệníchkháchiểnthịthôngtin nàylàjobs • Nếumuốnchoprocess tiếptụcthựcthi ở chế độ foreground, dùnglệnhfgn (trongđón làchỉsốcủajob hiểnthịtrongngoặcvuông, vídụ[1], [4],…), cònmuốnprocess thựcthi ở chế độ background thìdùnglệnhbg n. • Ví dụ $ jobs [1]+ Stopped find / “*.profile” –print $ fg 1 hoặc $ bg 1 Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  32. Thực thi process ở background • Thêm dấu & (ampersand) vào cuối lệnh • Ví dụ $find /home/l* -name *.profile –print > kq& [1] 2548 • Trìnhthôngdịchlệnhtạoramộtprocess tươngứngvớichươngtrìnhđóđồngthờiin rajob number ([n]) vàPID (Process Identifier) củaprocess đượctạora. • Ngaysaukhithựcthi, trìnhthôngdịchsẵnsàngnhậnlệnhmới(khôngbịblocked nhưđốivớiforeground process) Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  33. Thực thi background process • Background process vẫn xuất kết quả ra standard output là màn hình trong lúc thực thi => cầntáiđịnhhướngstandard output đểtránhmấtdữliệuxuất. • Ngườidùngkhôngthểtươngtácvớichươngtrìnhqua standard inputlàbànphímvớibackground proces => cầnphảitáiđịnhhướngstandard inputthôngqua file nếuprocess đócầnnhậpdữliệu. Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  34. Quản lý background process • Liệtkêcácjob đanghoạtđộng–dùnglệnhjobs $ 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ểnprocess từthựcthibackground sang foreground vàngượclạidùnglệnhfghoặcbg • Kết thúc một quá trình (~ một job) Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  35. Chuyển foreground thành background process • Trìhoãnquátrìnhđó(bằngCtrl + Z) • Dùnglệnhbg(background) đểchuyểnprocess sang chếđộthựcthibackground. • Ví dụ $ls –R / > kq ... ^Z [1]+ Stopped ls –R / >kq $bg (vì chỉ có một jobs nên bg không cần tham số) [1]+ ls –R / > kq& Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  36. Chuyển background thành foreground process • Dùng lệnh fg fg job_number (Nếu chỉ có một quá trình chạy background thì lệnh fg không cần tham số job_number) • Ví dụ $ ls -R / > kq & [1] 2959 $jobs [1]+ Running ls-R / > kq & $ fg 1 Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  37. Kết thúc quá trình • Dùng lệnh kill kill [-signal] process_identifier (PID) • CầndùnglệnhpstrướcđểbiếtPID củaquátrình. • Cóthểdùnglệnhđơngiảnnhưsau: kill process_identifier or kill -9 process_identifier Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  38. Nội dung • BiêndịchvàthựcthichươngtrìnhC/C++ • Giớithiệuvề process • Cơbảnvề process • Background và foreground process • Cáclệnhthaotácvới process • Lậptrìnhvới process • Sử dụng Makefile Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  39. Lập trình với process • Nội dung • Kiến trúc hệ thống *NIX • Tổ chức của process • Xử lý tham số dòng lệnh (command line arguments) • Tạo mới và kết thúc process • Gọithựcthilệnh/chươngtrìnhkhácbằngsystem(), exec…() Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  40. Lập trình với process • Nội dung • Kiến trúc hệ thống *NIX • Tổ chức của process • Xử lý tham số dòng lệnh (command line arguments) • Tạo mới và kết thúc process • Gọithựcthilệnh/chươngtrìnhkhácbằngsystem(), exec…() Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  41. Sơ lược về *NIX • Đơnkhối(monolithic) • Đa nhiệm (multitasking) • Nhiềungườidùngđồngthời(multiuser) • Đa dụng (general purpose) • Chia sẻ thời gian (time-sharing) • Bảo mật Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  42. Một số nhánh phát triển • BSD UNIX: California Univ. of Berkeley • System V: AT&T • SunOS/Solaris: Sun Microsystem • AIX: IBM Corp. • HP-UX: Hewlett-Packard • Linux: Linus Torvalds Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  43. Kiến trúc tổng quan Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  44. Kiến trúc luận lý Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  45. *NIX Kernel Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  46. Kernel vs. user space Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  47. Lập trình với process • Nội dung • Kiến trúc hệ thống *NIX • Tổ chức của process • Xử lý tham số dòng lệnh (command line arguments) • Tạo mới và kết thúc process • Gọithựcthilệnh/chươngtrìnhkhácbằngsystem(), exec…() Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  48. Quản lý các quá trình • Đa nhiệm • Tác vụ -> process. • Mỗi process có: • Khônggianđịachỉ(address space) • Code thực thi • Các vùng chứa dữ liệu • Stack • Trạng thái process: • registers, program counter, stack pointer, …. Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  49. Danh định của process • Process identifier (PID) duynhất, tăngdầntừ0 • MộtsốPID đặcbiệt: • 0: root • 1: init • … Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

  50. Bộ nhớ của process • Text: chứachươngtrình–code thựcthi-chứacácinstruction dànhchoCPU thựchiện-read only. • Data: vùngdữliệu-chứacácbiếnđượckhaibáotĩnhhoặcđộng–xincấppháttronglúcthựcthi. • Stack: chứatrạngtháivàcácthôngtin liênquanđếnviệcgọihàm. Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM

More Related