LAB

1. copyfile 성능 실험 (라즈베리파이에서)
1. copyfile 프로그램을 라즈베리파이에서 실행시키시오 - 첫번째 강의 노트의 pp24-26
2. 버퍼크기를 적절히 변경하여 강의노트 p27의 표와 유사한 표를 완성하시오.
3. 자신이 사용한 라즈베리파이의 사양을 조사하시오.
4. 위 사항들을 정리하여 보고서를 작성하시오. (특히 2,3의 관계)

2. File System 접근 권한
1. 사용자를 3개(A,B,C) 추가하시오.
    - 여러분은 관리자가되고 3명에게 새로운 계정을 만들어주는 것임
    - 각 사용자 계정으로 로그인하여 정상적으로 작업할 수 있어야 함
    - 사용자 정보 등록: 관련화일 /etc/passwd
    - 홈 디렉토리 만들어 소유권 이전: chown
2. 이 중  A,B를 한 그룹으로 마들고 C는 별개의 사용자로 두시오.
    - 새 그룹 정보 등록: 관련화일 /etc/group
3. A가 로그인하여 자신만 쓸 수 있고 나머지 사용자는 읽을 수 만 있는 "board"라는 데이타 화일을 만들게 하시오.
    - touch, chmod 명령 사용 가능
    - mode: 0644
4. A로 로그인하여 이 "board"에 "Hi, I am ( ). I've been here at <time>" 이라는 메세지를 남기는 프로그램을 작성하시오.
     - "helloworld.c" 참조
     -  ( ) 는 A,B,C 중 하나, 어려우면 A,B,C 를 구별 할 수 있는 정보도 가능, getuid()
     -   <time> 이 어려우면 생략 가능
5. setUid 를 통해  B,C 도 메세지를 남길 수 있도록하시오.
6. setGid 를 통해 B는 메세지를 남길 수 있으나 C는 남기지 못하도록 하시오.
7. 위 각 상황에 대한 적절한 보고서를 작성하시오. (예: 설정 전후 디렉토리 정보, 실행 예 등)

3. File 상태
1. 디렉토리 별로 사진 정리를 하는데 다음 두가지 경로가 모두 가능하도록 구성하시오.
    - 즉 연도별(2013, 2014, 2015)로도 정리가 가능하고 그룹별(가족, 친구, 직장)로도 정리가 가능해야 하는데 사진 화일은 물리적으로 한개만 존재해야 한다.
        예: ~/사진/2014/가족/x.jpg == ~/사진/가족/2014/x.jpg
참고: 디렉토리 구조
    ~/사진/2012/가족
    ~/사진/2012/친구
    ~/사진/2012/직장
    ~/사진/2013/가족
    ~/사진/2013/친구
    ~/사진/2013/직장
    ~/사진/2014/가족
    ~/사진/2014/친구
    ~/사진/2014/직장
    ~/사진/가족/2012
    ~/사진/가족/2013
    ~/사진/가족/2014
    ~/사진/친구/2012
    ~/사진/친구/2013
    ~/사진/친구/2014
    ~/사진/직장/2012
    ~/사진/직장/2013
    ~/사진/직장/2014

2. 현재 실행 중인 shell 환경에서 어떤 화일을 만들더라도 other에게는 모든 접근 권한이 배제된 상태가 되도록 shell 환경을 설정하시오.
    - 참고: touch <file>    // <file>없으면 빈 화일로 생성, 있으면 수정된 시간을 변경
3. "lookout"(강의노트 p23-26) 프로그램 실행해보기
4. 강의노트 p20 프로그램 실행해보기

4. Process
  1. 강의노트 p24,25의 wait1.c 프로그램을 실행시키고 출력되는 각 라인에 대해서 설명하시오.
    • 각 exit() 호출 앞에 sleep()을 삽입하여 실행시간을 지연시키고 이를 ps 나 top 명령으로 관찰하시오.
  2. 강의노트 p28,29의 fork2.c 프로그램을 실행시키고 관찰하시오.
  3. proc1, proc2, proc3, ... loop을 통해 sleep()을 여러번 실행하여 충분히 길게 실행하는 프로그램으로 작성하고 이를 이용해서 강의노트 p39, p42의 상황을 만드시오.

    Proc

    for ( ... ) {
      sleep(n);
      write(2, ...); // stderr에 pid, process group id, session id 등을 출력
    }
    // 필요하면 process group id, session id 등을 여기서 변경
    // 필요하면 위 for loop을 반복

    • process group, session 등을 관찰하시오.  (ps axjf)
    • process group을 변경하고 관찰해 보시오.
      예: p42 상황에서 터미널에서 ^C를 눌렀을 때 front에서 실행 중이던 Proc4, Proc5, Proc6이 모두 종료됨을 확인하고 Proc6을 별도 그룹으로 독립하도록 수정하여 실행 시킨 뒤 ^C를 눌렀을 때 어떻게 되는지 관찰한다.
       
    • process session을 변경하고 관찰해 보시오.
      예: p42 상황에서 로그아웃 하거나 터미날 연결이 끊겼을 떄 생성되었던 Process 들이 모두 종료됨을 확인하고 이 중 하나를 세션을 독립하도록 변경한 뒤 같은 상황에서 해당 Process 가 어떻게 되는지 관찰한다.
      예; nohup으로 실행하고 로그아웃 했을 때 일어나는 현상을 관찰한다.

5. Fifo
  1. 강의노트 p26-29의 add2.c 프로그램을 실행시키시키고 입출력을 관찰하시오.
  2. add2 를 p30 의 내용으로 바꾸고 실행한 뒤 입출력을 관찰 하시오.
  3. p35 의 내용대로 실행하고 관찰하시오.
    • fifo의 생성 여부 (ls 명령)
    • prog1은 cat으로 prog2는 more로 ...
  4. p28 을 다음과 같이 개조하여 dummy.c 로 만들고 이 dummy 뒤에 add2 를 coprocess 로 붙여서 실행하시오.
    • write(fd1[1], ...)을 command line argument 첫번째 이름(argv[1])을 open한 것에 write하는 것으로 변경
    • read(fd2[0], ...)을 두번째 이름(argv[2])을 open한 것에서 read하는 것으로 변경
    • add2를 실행하기 전에 두 개의 fifo를 만들어야 할 것.임
    • dummy.c에서는 pipe(), fork() 등이 사라져야 함

6. Cluster 구성
  1. 두번째 라즈베리파이를 다음과 같이 구성하시오.
    • SD 카드를 절반 정도 파티션으로 분리하여 한 파티션에 리눅스를 설치하고 나머지 파티션은 별도의 화일시스템을 구성하여 마운트한다.
    • 참고 사항: 파티션 도구, mkfs, mount 등 관련 명령 알아보기
    • 마운트 지점을 변경하며 마운트/마운트 해제를 하면서 관련 설정/상태 화일 들의 변화 관찰
  2. 두 개의 라즈베리파이로 다음과 같이 클러스터를 구성하시오.
    • DHCP는 공유기 또는 노트북(기존에 설치한 것) 둘 중에 하나만 사용해야 한다.
    • 참고 사항: ipTime 설정 매뉴얼, DHCP 설정 방 등
  3. 두 개의 리즈베리파이 중 한개에만 사용자를 등록하고 (/etc/passwd 설정) 이 사용가 다른 라즈베리파이에서도 동일하게 로그인되도록 설정하시오.
    • 첫번째 라즈베리파이는 사용자 정보를 요청할 때 자신이 가진 정보로 답하도록 설정되어야 함
    • 두번째 라즈베리파이는 첫번째 라즈베리파이에게 사용자 정보를 묻도록 설정되어야함
    • 두번째 라즈베리파이에서 로그인할 때 일어나는 현상을 관찰
    • 참고 사항: NIS(Network Information Service), Centralized authentication 등으로 검색
  4. 두번째 라즈베리파이에서도 동일한 경로에서도 동일한 경로에 홈디렉토리를 만들고 권한을 설정해야 하는데 이런 경우 서버마다 홈디렉토리에 다른 내용을 보관하게 된다. 이를 다음 방법으로 해결하시오
    • 홈디렉토리를 한개의 라즈베리파이에서만 구성하고 다른 라즈베리파이에서는 이를 원격으로 마운트한다.
    • 참고 사항: NFS(Network File System)
  5. 이와 같이 설정하면 클러스터 내의 어떤 서버(라즈베리파이)에 접속하여 로그인 하더라도 동일한 환경에서 작업하게 될 것이다. 이와 관련한 유사한 서비스를 조사하고 비교하여라
    • 예: NIS 대신 AD(Active Directory), LDAP 등, NFS 대신 SAMBA, SAN, IP-SAN 등
  6. 각 서버에 이름을 주도록 한다.
    • 예 ras1.<my domain name>, ras2.<my domain name>
    • 각 서버가 모든 서버의 이름을 알도록 설정
    • DNS(Domain Name Service)에 대해 조사하고 비교(실제 설정은 옵션)

7. Advanced IPC
  1. 강의노트 p6, p10의 프로그램을 실행 시키시오.
  2. 강의노트 p18 의 구조로 Client-Server 프로그램을 만드시오.

8. Signal
  1. 강의노트 p12의 프로그램을 실행시키시오.
  2. 강의노트 p23,24,25 의 sleep1, sleep2를 실행시키시오.
  3. 강의노트(Signal 2) p11,12 의 코드를 실행시키고 출력된 메세지가 어떤 상황에 나온 것인지 설명하시오.

9. Host info & Thread
  1. 라즈베리로 구성한 클러스터의 한 노드에 대한 호스트 정보를 강의노트 p32의 프로그램(gethostbyname())을 이용하여 가져와 출력하시오. (라즈베리 클러스터가 미완성인 경우 학과 서버에 적용)
  2. 라즈베리로 구성한 클러스터의 한 노드에 떠 있는 서비스에 대한 정보를 강의노트 p37의 프로그램(getserviceyname())을 이용하여 가져와 출력하시오. (라즈베리 클러스터가 미완성인 경우 학과 서버에 적용)
  3. 강의노트 p58-60의 shmcopy() 함수를 POSIX Thread로 변환하시오. 
    • 변환하는 개념적 설명
    • 변환 전후의 버퍼 구조에 대한 비교 설명
    Comments