Notice
Recent Posts
Recent Comments
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

채록채록

[OS] Program, Process, Process Address State, PCB, Context switch, Scheduler, Operation on process, IPC, Client-Server communication 본문

Developing

[OS] Program, Process, Process Address State, PCB, Context switch, Scheduler, Operation on process, IPC, Client-Server communication

김책은 2025. 7. 29. 13:58

Program

  1. Disk에 저장되어있는 binary code 덩어리
    1. 실행 가능한 파일
    2. 아직 memory에는 올라가있지 않다.
  2. 실행될 수 있지만 아직 실행되지 않은 상태
    1. will be executed by the kernel
  3. 정적(static)

Process

  1. program이 실행돼서 memory에 load된 상태
    1. by loader
    2. 실행파일인 program이 bus를 타고 memory 구조에 맞게끔 올라간 상태
    3. basic unit of execution and scheduling
  2. process ID(PID)라는 고윳값을 가진다.
    1. table에 기록되어있다.
  3. 동적(dynamic)
    1. cpu와 연결되어 변화를 주고받는 entity/instance(객체)
  4. encapsulation of the flow of control in a program
    1. 문맥

Process Address State

  1. disk에서 memory로 적재
    1. logical memory 구조이다.
  2. code segment에 text
    1. process counter(PC)가 가리키는 instruction을 cpu Instruction register에 복사한다.
    2. PC +1+1…
  3. data segment에 static data
    1. 전역변수, 상수영역
    2. class static data
  4. heap
    1. dynamically allocated memory
    2. new… 등
    3. data segment 위에서 올라가는 방향으로 쌓인다.
  5. stack
    1. dynamic allocated memory
    2. main() 등의 function call
    3. 0xFFFFFFFF부터 아래로 내려가면서 쌓인다.
  6. stack과 heap 사이
    1. instruction 수행을 위한 data
    2. function 지역변수
  7. cpu 계산결과가 memory 공간에 덮어씌워진다.

Process 생애주기

  1. new
    1. load, PCB 초기화 작업 등
    2. admitted되면 ready queue로 이동
  2. ready
    1. PCB 정보 존재
    2. linked list 형태로 구현되어 있다.
    3. scheduler dispatch되면 running queue로 갈 수 있는 것들
  3. running
    1. interrupt 발생하면 (timer interrupt or waiting queue에 있던 다른 process의 i/o 완료) ready queue로 이동
    2. i/o or event wait(trap 요청) 발생하면 waiting queue로 이동
      1. disk에서 어떤 파일의 정보를 읽어와야지만 다음 일을 할 수 있을 때 등…
    3. exit하면 terminated될 것들
  4. waiting
    1. 요청한 i/o 끝날때까지 기다리는 state
      1. i/o request, time slice expired, fork a child, wait for an interrupt 등
      2. 어떤 i/o를 기다리느냐에 따라서 서로 다른 queue 사용
    2. i/o or event completion되면 interrupt handler에 의해 ready queue로 이동
      1. fairness를 보장해주는 시스템
      2. 안그럼 ready queue에서 자기 순서 기다리고 있는 애들은 무슨 죄?
  5. terminated
    1. runnig하던게 exit한 state

Process Control Block (PCB)

  1. cpu에 내려갔다가 올라올 때 필요한 모든 정보를 담은 구조체
    1. 1 process 1block by kernel
  2. process state, program counter(PC), cpu register, cpu scheduling information, memory-management information, accounting information, i/o status information
  3. kernel이 관리하는 memory에 저장된다.

Context Switch(cpu switch)

  1. Multi program by Time Sharing
    1. process P0 → operating system ← process P1
      1. cpu에서 수행되는 주체가 변한다 = cpu의 문맥 자체가 변하는 것이다.
    2. OS가 scheduling, interrupt, trap등의 interrupt&system call로 handling
  2. cpu 명령어는 binary code
    1. flow(문맥) : 어디까지 수행되었는지, 그 시점에 필요한 data들이 무엇인지 (for register)
    2. save state into PCB0
      1. cpu register값, process state, memory-management information 등
    3. reload state from PCB1
      1. 그것들을 cpu register에 그대로 저장
  3. 끝나면 free memory로 반환된다.
  4. 단점
    1. 오버헤드 발생
      1. cpu register ↔ PCB 의 문맥교환시간
      2. os도 cpu를 점유해야하는 권한을 넘겨주는 등의 추가작업이 필요한 소프트웨어이다. (feat. dual mode operation)
    2. dependent on hardware support
      1. context switch 전용 register 존재

Scheduler

  1. context swtich할 때 ready queue의 어떤 process를 다음 cpu에서 동작할 process는 무엇이 될것인가에 대한 문제
  2. Long-term scheduler
    1. job scheduler
    2. n개의 process를 memory overflow때문에 다 올릴 수 없을 때
      1. Virtual memory가 없어서 physical memory가 부족할 때
    3. disk에 존재하는 process들 중 어떤 애를 memory에 올려서 cpu와 연결되게 할 것인가
  3. Short-term scehduler
    1. cpu scheduler
    2. reqdy queue에 있는 애들 중 누구를 cpu에 올릴 것인가
  4. Medium-term scheduler
    1. swapper
    2. memory에 너무 많은 process가 있을 때 일부 process를 memory에서 제거하고 나중에 다시 로드될 수 있도록 disk로 swap
    3. cpu에서 돌던 애들 중에서 누가 disk에 내려가고 (=swap out)
    4. 누가 memory에 올라갈 것인가 (=swap in)

Operations on Processes

  1. fork()
    1. creates and initializes a new PCB & new address space
    2. fork()를 호출하는 것도 process
      1. 부모 process도 ready queue에 들어가고
      2. fork된 자식 process도 ready queue에 들어간다.
      3. 각각 scheduling이 된다.
      4. 근간이 되는 process (init) 존재
    3. fork() 호출 시점의 상태 그대로를 shallow copy
      1. pointer 변수를 갖는 indirection을 처리하기 위해
      2. 같은 곳을 가리키도록 참조에 의한 할당
      3. 공유 가능 → process 협력
    4. fork() 후의 명령어부터 실행 계속함
      1. 부모 process : fork()의 결과로 child PID 반환
      2. 자식 process : fork()의 결과로 0 반환
        1. 분기가 생성된다
        2. 수행하는 동작 (program path)가 달라진다.
    5. ex : web server
    6. exec()
      1. load program into process address space
        1. 실행하고자 하는 프로그램 경로/이름, 프로그램 실행 위한 옵션값등을 인자로 받는다.
      2. fork() 후 exec()
        1. 이미 복사된 것에다가 입히는 것
        2. disk에서 load된 binary code를 code segment에 덮어씌운다.
        3. register도 삭제한다.
        4. 새로운 프로그램이 입혀지는 셈이다.
      3. 그럼에도 불구하고 부모-자식관계는 유지된다.
      1. exit()
        1. kernel에게 일 벌려놓은 것들 수습(사후처리) 후 종료
        2. _exit() : 그냥 종료해주는 tool같은 것
      2. abort()
        1. 비정상적 종료 (abnormal termination)
      3. wait()
        1. multi process 상황에서 부모 process가 사라지지 않게 child process의 종료를 대기하는 system call
        2. parent process가 wait()을 실행해야 child process proc entry가 proc table에서 released된다.
        3. zombie process
          1. 종료가 되었지만 부모 process가 아직 wait()호출을 하지 않은 process
          2. process가 종료되면 사용하던 자원은 운영체제가 되찾아가는데 process table의 해당 항목은 부모 프로세스가 wait()을 호출할 때까지 남아있게 되기 때문
        4. orphan process
          1. parent process가 wait()을 호출하지 않고 terminate
While(1){ //다수 연결 보장
	int socket = accept(); //client 요청이 들어오면 세션 연결
	if ((pid = fork()) == 0){
	//세션이 만들어져 있는 상태 = socket이 연결되어있는 상태
	// child process에서 할 역할들 수행 
	// handle client request
} else{
	// parent process면 close socket
	} //그리고 반복문이니까 waiting for 다음 accept() 세션 연결 요청
}

  1. windows에서는 CreateProcess()
    1. fork+exec 동시에
    2. 맨땅에 새로운 process를 만드는 것이기 때문에 원본 & 부모자식관계가 없다.
    3. multi-threading 이후 os이기 때문
  2. ex : google chrome browser with 3 types of processes:
    1. browser process & renderer process & plug-in process
    2. 각각의 tab마다 separate renderer process가 따로 붙는다.

Inter-Process Communication (IPC)

  1. process간 통신
  2. message passing
    1. message queue가 존재
    2. os가 process A와 B가 message 교환할 수 있도록 양방향 buffer 관리 & signal 보내준다.
    3. 장단점
      1. kernel overhead는 증가하지만 안전하다.
  3. shared memory
    1. os는 shared memory를 할당&반환하는 역할만 수행
    2. 어떤 message를 주고받는지는 관여하지 않는다.
      1. kernel이 해주던 것들을 process에서 직접 해야한다.
    3. 단점
      1. Garbage memory 발생 가능성이 증가하는 등 위험하다.
      2. 동기화 문제 등등의 안전을 위한 사후처리를 개발자가 다 manualling해야한다.
    4. circuler que로 구현
    5. Unix/Linux IPC : pipes, FIFOs, message queue, shared memory, socket
      1. socket : 원격의 다른 computer process간 통신. 그러나 한 system인 IPC 처리를 port값 매핑하여 data를 주고받는다.
int count;
struct item buffer[N];
int in, out; //in pointer에 producer가 데이터를 계속 넣고
//out pointer에서 계속 빼내면서 역할 수행

Client-Server communication

  1. Sockets
  2. Remote Procedure Call(RPC)
    1. parameter를 socket을 통해 전달
    2. 연산한 후 결과값을 전달
    3. ex : chat gpt