내 잡다한 노트
챕터5. 파일, 파이프, 소켓 프로그래밍 본문
모든 통신에 관련된 연산은 open, read, write, close 구조라는 것을 잊지 말아야 한다.
파일
파일 기술자는 파일 접근 권한 외에 현재 파일의 어느 위치를 읽고 있는지에 대한 정보도 보관한다.
파일을 이용한 통신
부모 프로세스가 자식 프로세스를 fork로 만들었을 때,
파일 기술자가 자식 프로세스에도 상속된다. 파일 기술자의 위치 정보는 부모와 자식이 공유하게 된다.
부모가 읽기 연산을 해도 기술자가 전진하고 자식이 해도 전진한다.
이때 부모가 기술자를 0번 위치로 이동시키는 명령어가 lseek 이다.
파일은 동기화를 운영체제에서 지원해주지 않기 때문에 wait을 이용해 기다렸다가 작업ㅂ을 시작한다.
파이프
이름없는 파이프와 이름 있는 파이프로 크게 나뉜다. 여기선 이름 없는 파이프를 살펴본다.
파이프를 이용한 통신
파일에선 read와 write가 파일 기술자를 공유하지만 파이프에서는 read와 write의 기술자가 따로 존재한다.
따로 존재하기 때문에 동기화가 가능하다.
파이프는 파일 기술자를 fd[2]와 같이 2개의 원소를 가진 배열로 정의하는데, 원소 하나는 읽기용이고 하나는 쓰기용이다.
그래서 fork를 하면 총 4개의 파일 기술자가 존재한다. 그래서 close도 총 네 번 나타난다.
대기가 있는 통신이기 때문에 wait가 필요없다.
네트워킹
클라이언트와 서버는 둘 다 소켓을 이용한다. 소켓은 양방향 통신을 지원하고 동기화도 지원한다.
클라이언트는 소켓을 생성한 후 connect를 사용해 서버와의 접속을 시도. 접속되면 read, write 작업을 하며
작업을 끝내고 소켓 기술자를 닫고 종료한다.
서버는 소켓을 생성한 후 bind를 사용해 생성한 소켓을 특정 포트에 등록한다.
한 컴퓨터 내에도 여러 프로세스가 존재하기 때문에 어떤 프로세스와 통신할 지 구분해야 한다.
이때 사용하는 구분 번호를 포트 번호라고 한다.
하나의 포트 번호에 소켓이 하나만 생성되는 것은 아니다. 하나만 되면 한 사람만 접속할 수 있어서 말이 안된다.
그래서 서버는 하나의 포트 번호에 여러 개의 소켓을 생성한다.
bind로 소켓을 특정 포트에 등록하면 listen을 실행하여 클라이언트를 받을 준비를 한다.
'운영체제' 카테고리의 다른 글
챕터6. 교착 상태 필요조건 (0) | 2022.08.29 |
---|---|
챕터6. 교착상태의 개요 (0) | 2022.08.29 |
챕터5. 임계구역 해결 방법 (0) | 2022.08.29 |
챕터5. 공유 자원과 임계구역 (0) | 2022.08.29 |
챕터5. 프로세스 동기화. 프로세스 간 통신 (0) | 2022.08.29 |