IPC&Thread

Hallelujah·2024년 11월 12일

CS

목록 보기
3/10

PCB(Process Control Block)

운영체제에서 프로세스에 대한 메타데이터를 저장한 데이터
linux의 ps -ef커맨드라인을 실행해 PCB내용을 알 수 있다
2개창 -> 하나는 hw9/tcps실행, 하나는 ps -ef 입력
UID: 프로세스를 실행시킨 프로세스의 소유자
PID: 실행된 프로세스의 ID(숫자)
PPID: 부모프로세스 PID(parent process id)
C: 스케줄링 필드(중요x)
STIME: 프로세스 연결된 시간
TTY: 프로세스가 연결된 터미널
TIME: 프로세스에 의해 사용된 CPU시간
CMD: 실행한 프로세스 이름/명령

컨텍스트 스위칭

PCB를 기반으로 프로세스의 상태를 저장하고 로드시키는 과정(사실 싱글코어에서 컴퓨터는 많은 프로세스가 돌아가는 것처럼 보이지만 다른 프로세스와 컨텍스트 스위칭이 빠른속도로 실행되고 있음)

IPC(Inter Process Communicatoin)

IPC는 프로세스끼리 데이터를 주고받고 공유데이터를 관리하는 메커니즘
ex) 클라이언트 & 서버
IPC의 종류는 shared memeory, file, socket, pipe,message queue가 있음
메모리가 완전히 공유되는 스레드보다는 속도가 떨어진다

  • SharedMemory, 익명파이프 등등의 코드들

  • SharedMemory

    • 여러 프로세스에 동일한 메모리 블록에 대한 접근 권한이 부여됨
    • 장점은 비교적 간단한 통신, 효율적인 데이터 공유가능, 적은 오버헤드
    • 하지만 공통된 메모리를 사용하기 때문에 sychronization알고리즘을 잘 짜야함
    • 보통 shared libray에 이용됨(dynamic linking 시에 필요한 library들을 가져올때 메모리 크기를 줄여줌)
    • 예시 코드
      • hw7/sipc1, hw7/sipc2 -> sharedmemory
      • 실행, ps -ef로 pid확인
  • 파일

    • 보통 Virtual address를 file로 mapping해서 사용자는 memory에서 read/write함
    • 하지만 실제로는 file에서 read/write함
  • 소켓

    • TCP, UDP이용해서 프로세스/네트워크 & 프로세스/네트워크 간에 데이터를 송/수신한다
    • 예시 코드
      • hw9/tcps, hw9/tcpc
  • 익명파이프

    • 프로세스 간에 FIFO방식으로 읽히는 임시 공간인 파이프를 기반으로 데이터를 주고받음
    • 단방향
    • 부모/자식 간에 통신할 때 이용
    • 예시 코드
      • hw9/pipe
  • Named Pipe

    • 파이프 서버와 하나 이상의 파이프 클라이언트 간의 통신을 위한 명명된 단방향/양방향 파이프임
    • 예시 코드
      • hw9/fifos, hw9/fifoc
  • Message Queue

    • 메세지를 queue데이터 구조 형태로 관리함
    • 커널 전역에서 관리됨
    • Shared Memory와는 다르게 동기화 고려 안해도 됨
    • 예시 코드
      • hw7/msgq1, hw7/msgq2 -> messagequeue

Thread

실행가능한 가장 작은 단위, 프로세스는 여러 스레드를 가질 수 있음

  • 프로세스는 코드, 데이터, 스택, 힙을 각각 생성하지만 스레드는 코드, 데이터, 힙을 공유(하지만 스택은 따로)
  • 멀티스레딩: 프로세스 내 작업을 여러 개의 스레드로 처리하는 기법
    • 스레드끼리 자원을 공유해 효율적임
    • 예시코드
      • hw5/thread
      • cd C:\csStudy
      • python lec-05-prg-09-dealer-router-async-server.py 1
      • python lec-05-prg-11-dealer-router-async-client-thread.py client#1
      • python lec-05-prg-11-dealer-router-async-client-thread.py client#2
      • python lec-05-prg-11-dealer-router-async-client-thread.py client#3
profile
개발자

0개의 댓글