Presentation is loading. Please wait.

Presentation is loading. Please wait.

Unix 教學 1. Unix-like System  Linux  FreeBSD  Solaris  Mac OS X  … 2.

Similar presentations


Presentation on theme: "Unix 教學 1. Unix-like System  Linux  FreeBSD  Solaris  Mac OS X  … 2."— Presentation transcript:

1 Unix 教學 1

2 Unix-like System  Linux  FreeBSD  Solaris  Mac OS X  … 2

3 Tools  Login tools  Putty / pietty  Editors  ee(Easy Editor)  vi  FTP tools  WinSCP  FileZilla Client 3

4 How to use putty/pietty?  Putty  http://www.chiark.greenend.org.uk/~sgtatham/putty/download.ht ml http://www.chiark.greenend.org.uk/~sgtatham/putty/download.ht ml  Pietty  http://www.csie.ntu.edu.tw/~piaip/pietty/ http://www.csie.ntu.edu.tw/~piaip/pietty/ 4

5 Log in  The default for SSH service is port 22  bsd1.cs.nctu.edu.tw – bsd5.cs.nctu.edu.tw  linux1.cs.nctu.edu.tw – linux6.cs.nctu.edu.tw  … 5

6 Unix-like command - Shell  Command  ls - list directory contents  mv - move files or directories  mkdir - make directories  rm - remove files or directories  cd - change directory  man - format and display the on-line manual pages  chmod - change file system modes of files and directories.  … Reference: http://www.csie.nctu.edu.tw/~tsaiwn/course/introcs/history/linux/linux.tnc.edu.tw/te chdoc/shell/book1.html 6

7 Unix-like command - Shell  Command  ls -a Include directory entries whose names begin with a dot (".").  ls -l (The lowercase letter "ell".) List files in the long format, as described in the The Long Format subsection below.  man ls 7

8 Unix-like command - Shell  Command  mkdir [folder_name] (create folder)  rmdir [folder_name] (delete folder)  rm [file_name] (delete file)  mv [source] [target] (move files or folder) 8

9 Unix-like command - Shell  Command  cd [directory] (change the working directory)  pwd (return working directory name)  chmod [mode] [file] (change file modes) Mode : [user][group][guest] -rwxrwxrwx 1 user group 1 Sep 28 2010 test.txt Ex. chmod 644 test.txt -rw-r--r-- 1 user group 1 Sep 28 2010 test.txt 9

10 Unix-like command - Shell  Command  man man (format and display the on-line manual pages)  Other:  Reference: http://www.csie.nctu.edu.tw/~tsaiwn/course/introcs /history/linux/linux.tnc.edu.tw/techdoc/shell/book1. html http://www.csie.nctu.edu.tw/~tsaiwn/course/introcs /history/linux/linux.tnc.edu.tw/techdoc/shell/book1. html http://linux.vbird.org/linux_basic/redhat6.1/linux_06 command.php http://linux.vbird.org/linux_basic/redhat6.1/linux_06 command.php 10

11 ee/edit  BSD only  Start ee : % ee  Usage  edit mode like notepad  ESC-ENTER : save/exit 11

12 vi  Vi editor have two modes  Command mode  Edit mode  start vi : %vi Reference: http://www.csie.nctu.edu.tw/~tsaiwn/course/introcs/history/linux/linux.tnc.edu.tw/te chdoc/vi.htm Command mode Edit mode Exit Edit mode Insert Delete Replace Copy..... [Esc] 12

13 FTP - WinSCP  Add new account  使用工作站帳號密碼  Port 22  SFTP 13

14 FTP - FileZilla  開啓站台管理員  新增站台  選 SFTP  登入型式 ( 一般 ) 14

15 Fork & thread 教學 15

16 fork  fork - create a new process  The new process (child process) shall be an exact copy of the calling process (parent process)  The child process shall have a unique process ID(different parent process ID).  The return value in the child is 0,whereas the return value in the parent is the process ID of the new child.  It return -1 only when fork failed. 16

17 fork() - example1 #include int main(void) { pid_t pid; pid = fork(); switch (pid) { case -1: printf("failure!\n"); break; case 0: printf("I am child!\n"); break; default: printf("my child is %d\n",pid); break; } for (;;) { /* do something here */ } } % gcc fork1.c -o fork1 %./fork1 & [1] 16444 % my child is 16445 I am child! % ps PID TTY TIME CMD 16212 pts/18 00:00:00 tcsh 16444 pts/18 00:00:05 fork1 16445 pts/18 00:00:05 fork1 16446 pts/18 00:00:00 ps % killall -v fork1 Killed fork1(16444) with signal 15 Killed fork1(16445) with signal 15 [1] + Terminated./fork1 17

18 Shared Memory  Memory space is shared between processes  int shmget(key_t key, size_t size, int shmflg)  Request a shared memory, and the return value is a shared memory ID  void* shmat(int shmid, const void* shmaddr, int shmflg)  Attach an existing shared memory to an address space, and the return value is void pointer to the memory  int shmdt(const void* shmaddr)  Detach a shred memory, shmaddr is the value return by shmat()  int shmctl(int shmid, int IPC_RMID, NULL)  Remove a shared memory 18 Process AProcess B Shared Memory

19 fork() + shared memory #include int main() { int ShmID, *ShmPTR; pid_t pid; ShmID = shmget(IPC_PRIVATE, sizeof(int), IPC_CREAT|0666); ShmPTR = (int *) shmat(ShmID, NULL, 0); pid = fork(); if (pid == -1) printf("failure!\n"); else if (pid == 0) for(;;) { if( ShmPTR[0] != 0 ) { printf("child get number = %d\n",ShmPTR[0]); exit(0); } else { srand(pid); ShmPTR[0] = rand()%10+1; printf("parent rand number = %d\n",ShmPTR[0]); } exit(0); } 19 % gcc fork2.c -o fork2 %./fork2 & [1] 17671 % parent rand = 5 child get number = 5 Fork failure Child process Parent process

20 Thread  Light weight process  Share resources  Own private data  Synchronization 20

21 Pthread API  int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg)  Create a new thread. If successful, the function returns 0  int pthread_join(pthread_t thread, void** status)  Suspend caller until thread argument ends. If successful, the function returns 0  void pthread_exit(void* status)  Terminate calling thread  int pthread_cancel(pthread_t thread)  Send a cancellation request to a thread  int pthread_kill(pthread_t thread, int sig)  Send the signal sig to thread  pthread_t pthread_self(void)  Return ID of calling thread 21

22 How to create Pthread in unix-like OS?  Linux, BSD, Saloris…etc  Include: #include  Command line: % g++ threads.cpp -lpthread -o threads 22

23 pthread() – example1 #include #define NUM_THREADS 5 void *PrintHello(void *); int main (int argc, char *argv[]) { pthread_t threads[NUM_THREADS]; int rc, t; for(t=0;t<NUM_THREADS;t++) { printf("In main: creating thread %d\n", t); rc = pthread_create(&threads[t], NULL, PrintHello, (void *)&t); usleep(1000); if(rc) { printf("ERROR; return code from pthread_create() is %d\n", rc); exit(-1); } void *PrintHello(void *threadid) { int tid = *((int *)threadid); printf("Hello World! thread #%d\n", tid); pthread_exit(NULL); } 23

24 pthread() – example1 cont. % g++ threads1.cpp -o threads1 -lpthread %./thread1 In main: creating thread 0 Hello World! thread #0 In main: creating thread 1 Hello World! thread #1 In main: creating thread 2 Hello World! thread #2 In main: creating thread 3 Hello World! thread #3 In main: creating thread 4 Hello World! thread #4 24

25 pthread() – example2 #include using namespace std; void *doSomething(void * arg); int main() { int tmp1=1, tmp2=2; pthread_t t1; if ( pthread_create(&t1, NULL, doSomething, (int *)&tmp1) != 0 ) { cout << "pthread_create() error" << endl; exit(-1); } doSomething((int *)&tmp2); } void *doSomething(void *arg) { for (;;) { int tmp = *((int *)arg); cout << tmp; cout.flush(); sleep(tmp); } return NULL; } 25 % g++ threads2.cpp -o threads2 -lpthread %./thread2 211211211211211…(loop)…

26 Assignment 26

27 1-1. use fork() and pthread  Create two global arrays with five elements  Just “rand()” all the elements between 1~10, and find the maximum  Print out all the elements and maximum of each array, and the maximum of the two arrays  Output sample:  array1: 4 6 7 7 8, max1=8  array2: 3 7 6 3 1, max2=7  maximum=8 27

28 1-1. use fork()  VER. Fork:  Create a child process  parent rand() the values of array1 and find the max1 of array1  child rand() the values of array2 and find the max2 of array2  Then child find the maximum between max1 and max2(YES! communication between process!) 28

29 1-1. use Pthread  VER. Thread:  Create two threads  thread1 rand() the values of array1 and find the max1 of array1, then sleep(max1)  thread2 rand() the values of array2 and find the max2 of array2, then sleep(max2)  Then main process find the maximum between max1 and max2. 29

30 1-2: producer and consumer  First, build a GLOBAL BUFFER. It’s a queue(only need FIFO array, don’t need to create a queue)  Build a producer thread and consumer thread  Producer: put numbers by rand() into buffer. You can’t put more number when the buffer is full.  Consumer: take out the numbers in the buffer. You can’t take more number out when the buffer is empty.  Print out the number and its location in buffer from Producer and Consumer (see textbook 7 th. Edition Ch3-4) 30

31 1-2 cont.  Buffer size=5  Number of consumer and producer =12  Output sample:  producer(1)-producer put [208] in buffer[0]  producer(2)-producer put [142] in buffer[1]  consumer(1)-consumer get [208] in buffer[0]  producer(3)-producer put [66] in buffer[2]  producer(4)-producer put [241] in buffer[3]  producer(5)-producer put [164] in buffer[4]  consumer(2)-consumer get [142] in buffer[1]  producer(6)-producer put [7] in buffer[0] …………….. 31

32 1-2 cont. #include #define BUFFER_SIZE 5 int buffer[BUFFER_SIZE]; void * consumer(void *argv){ for (int num=0;num<12;num++){ sleep(rand()%10); //write here } void * producer(void *argv){ for (int num=0;num<12;num++){ sleep(rand()%5); //write here } int main(){ int errno; srand((int)time(0)); pthread_t p_tid, c_tid; pthread_create(&c_tid, NULL, consumer, NULL); pthread_create(&p_tid, NULL, producer, NULL); pthread_join(c_tid,NULL); pthread_join(p_tid,NULL); } 32

33 Requirement  You should submit three c/cpp files and one report  The report should include output results and what you have learned in this homework  File format:  1-1-fork.c  1-1-thread.c  1-2.c  STUDENT_ID.doc 33

34 Requirement cont.  Compress your file and named as STUDENT_ID.zip  Upload to the FTP:  host : caig.cs.nctu.edu.tw  port : 30021  username : OS11  password : OS11 34

35 Q & A 35


Download ppt "Unix 教學 1. Unix-like System  Linux  FreeBSD  Solaris  Mac OS X  … 2."

Similar presentations


Ads by Google