주석 규칙:
1. /* 로 시작하는 주석은 아래혹은 왼쪽에 있는 코드 설명 주석이다
2. /* 이후 번호가 있으면 (ex /*3. 내용) 아래 통신 규칙에 해당하는 번호이다.
3. //로 시작하는 주석은 다음 내용에 해당하는 코드 추가가 필요하다는 의미의 주석이다.
4. 주석안에 {val}은 변수 val을 의미한다.
통신 규칙:
1. server가 managefifo file을 생성한다.
2. client는 managefifo file이 있으면 open 후 "request {자신의 PID} {파일 크기}"를 write하고, 없으면 T시간 동안 스핀하며 대기한다.(T시간이 지나면 프로세스를 종료한다.)
3. server는 managefifo에 있는 요청 메시지를 확인하면 3개의 FIFO 파일 "{요청자 PID}FIFO1","{요청자 PID}FIFO2","{요청자 PID}FIFO3"을 생성하고 3개의 쓰레드를 각각의 파일에 할당한다.
4. client는 3개의 쓰레드를 할당하고 각 쓰레드는 순서에 따라 "{자신의 PID}FIFO1","{자신의 PID}FIFO2","{자신의 PID}FIFO3"를 open한다 만약 파일이 없다면 T시간 동안 스핀하며 대기한다.(T시간이 지나면 프로세스를 종료한다.)
5. client의 각 쓰레드는 "code.txt"파일을 3분할하여 병행적으로 읽은 후 "{자신의 PID}FIFO{n}" 파일에 write한다. 마지막에는 "request END"를 추가한다.(서버 쓰레드와 FIFO 클라이언트 쓰레드가 1대1대1 대응이므로 마지막 메시지에는 식별정보 필요없음, n = 쓰레드 번호)
6. server의 각 쓰레드는 "request {요청자 PID} END"를 읽을 때까지 "{요청자 PID}FIFO{n}" 파일을 읽고 "{요청자 PID}temp{n}"파일에 임시 저장한다.
7. server의 각 쓰레드는 "{요청자 PID}temp{n}" 읽고 복호화하여 "{요청자 PID}FIFO{n}" 파일에 write한다. 마지막에는 "response END"를 추가한다.(서버 쓰레드와 FIFO 클라이언트 쓰레드가 1대1대1 대응이므로 마지막 메시지에는 식별정보 필요없음)
8. client의 1번 쓰레드는 "{자신의 PID}FIFO1"의 내용을 "response END"를 읽을 때까지 출력한다.
9. client의 2번 쓰레드는 "{자신의 PID}FIFO2"의 내용을 "response END"를 읽을 때까지 "{자신의 PID}temp2" 파일에 저장하고 1번 쓰레드의 출력이 끝나면 "{자신의 PID}temp2"의 내용을 출력한다.
10. client의 3번 쓰레드는 "{자신의 PID}FIFO3"의 내용을 "response END"를 읽을 때까지 "{자신의 PID}temp3" 파일에 저장하고 2번 쓰레드의 출력이 끝나면 "{자신의 PID}temp3"의 내용을 출력한다.
client는 managefifo file이 있으면 open 후 "request {자신의 PID} {파일 크기}"를 write하고, 없으면 T시간 동안 스핀하며 대기한다.(T시간이 지나면 프로세스를 종료한다.)
server는 managefifo에 있는 요청 메시지("request {자신의 PID} {파일 크기}")를 확인하면 응답을 위해 3개의 쓰레드를 할당하고, 각 쓰레드는 3개의 "{요청자 PID}FIFO{n}2ser"와 "{요청자 PID}FIFO{n}2cli" FIFO 파일을 생성한다.
client는 3개의 쓰레드를 할당하고 각 쓰레드는 순서에 따라 "{자신의 PID}FIFO1{n}2ser"와 "{자신의 PID}FIFO{n}2cli"를 open한다
client의 각 쓰레드는 "code.txt"파일을 3분할하여 병행적으로 읽은 후 "{자신의 PID}FIFO{n}2ser" 파일에 writelock를 건 후 write한다.
server의 각 쓰레드는 "{요청자 PID}FIFO{n}2ser" 파일을 읽고 복호화하여 "{요청자 PID}FIFO{n}temp.txt"파일에 임시 저장한다.
server의 각 쓰레드는 "{요청자 PID}FIFO{n}temp.txt" 읽고 "{요청자 PID}FIFO{n}2cli" 파일에 writelock를 건 후 write한다.
client의 1번 쓰레드는 "{자신의 PID}FIFO12cli"의 내용을 읽고 출력한다.
8이 끝나면 client의 2번 쓰레드는 "{자신의 PID}FIFO22cli"의 내용을 읽고 출력한다.
9가 끝나면 client의 3번 쓰레드는 "{자신의 PID}FIFO32cli"의 내용을 읽고 출력한다.