티스토리 뷰

기타/TIL

210122 금 TIL

bong-f 2021. 1. 23. 02:52

Done


Learned

참고

  • 이화여자대학교 반효경 교수님 OS 3강

프로세스란?

  • 실행되고 있는 프로그램

프로세스의 문맥이란?

  • 프로세스가 cpu를 잡았다가 다른 프로세스가 cpu를 잡고 다시 원래 프로세스가 cpu를 잡는다 (여러 프로그램이 동시에 실행되는 듯한 착각을 일으킬 정도로 빨리 실행되는 cpu)
  • cpu를 다시 잡았을 때 이전에 어디까지 코드를 실행했고 레지스터에 어떤 값이 있었고를 알아야 그것에 이어서 프로세스를 실행할 수 있다. 이렇게 현재 프로세스의 상태를 나타네는데 필요한 모든 요소를 프로세스의 문맥이라고 한다.
  • 프로세스 문맥은 크게 3가지로 나눌 수 있다.
    • CPU 수행상태를 나타내는 하드웨어 문제
      : 프로그램 카운터가 어디를 가리키고 있었나
      : 레지스터에 어떤 값을 넣고 있었나
    • 메모리와 관련된 프로세스 주소공간
      : code, data, stack (이 프로세스 주소공간)에 어떤 내용을 담고 있는가
    • PCB와 커널스택
      : 프로세스가 하나 실행될 때마다 운영체제는 그를 관리하기 위해 자신의 데이터 영역에 자료구조를 만든다. = PCB
      : Process Control Block _ (1) process state / process id 등 (2) program counter가 어디 코드 가리키고 있었는지, register에 어떤 값들이 저장되고 있었는지 백업 데이타 (3) code, data, stack의 위치정보, 리소스들 의 내용을 포함한다.
      : 커널스택 : 프로세스가 OS의 도움이 필요해서 Systemcall을 했을 때 pc가 커널 주소공간의 코드를 실행을 한다. 커널도 함수로 이루어져 있기 때문에 함수호출이 일어나면 커널 주소공간의의 stack에 관련된 정보를 저장한다. 커널은 각 프로세스 별로 독립적인 스택을 구성한다. 따라서 프로세스 문맥을 알려면 커널 스택을 알아야 한다.

문맥교환이란 ? context switch

  • cpu를 한 프로세스에서 다른 프로세스로 넘겨주는 과정이다.
    : cpu를 잡고 있던 프로세스의 정보를 pcb로 넘기고, 새로 cpu를 잡는 프로세서의 pcb를 가져온다
    :

프로세스의 상태 3가지 + terminated (new는 제외했다) + suspended

  • 프로세스의 상태에 따라 cpu를 잡을 수도 있고 못잡을 수도 있다.
  • Running : cpu를 잡고 있을 때
  • Ready: cpu만 안잡았을 뿐이지 그 외 조건은 running과 똑같다. 필요한 데이타도 다 메모리에 올라와 있어야 한다
    : running 이다가 timer에 할당된 시간 완료가 되면 ready가 된다.
  • Blocked(wait, sleep) : I/O같이 입력을 오래 기다리는 상황 (자신이 요청한 event가 아직 완료되지 않은 상태)등으로 현재 CPU를 잡는다 하더라도 instrucation을 수행할 수 없는 상태다.
  • terminated : insturction이 다 수행되고 수행이 끝난 상태. 정리하는 작업이 남아 있다.
  • susended : 중기스케줄러가 메모리 관리를 위해 프로세서에게 메모리를 뺐는 등의 외부적인 이유로 프로세스 수행이 정지된 상태다. 프로세스 통째로 디스크에 swap out된다. 외부에서 다시 active해주지 않는 이상 ready가 될 수 없어 blocked와는 다르다. / suspended도 blocked상태에서 out되었다가 입출력이 완료되면 suspend ready(=ready에서 suspended out 된 상태)가 될 수 있다. 그러나 다시 swap in 되려면 어찌되었든 외부의 힘이 필요하다

프로세스의 상태 + queue

  • 프로세스를 스케줄링하기 위해 큐가 있다.
  • 이 큐들은 각 디바이스에 붙어 있거나 한 것이 아니고 커널이 본인의 데이터 영역에 자료구조로 만들어 놓고 프로세스의 상태를 바꿔가면서 cpu에게 ready 큐에 있는 애들한테 cpu를 준다
    : 그래서 I/O가 끝나서 device interrupt가 발생하면 CPU 제어권이 OS에게 넘어가잖아. 그 때 OS는 일단 데이터를 넘겨주고 해당 프로세스의 상태를 blocked에서 readay로 바꾼다.
  • job 큐 : 현재 시스템 내에 있는 모든 프로세스의 집합으로 ready 큐와 device 큐를 포함한다
  • device큐는 I/O 디바이스의 처리를 기다리는 프로세스의 집합으로 blocked 상태인 것으로 이해했다. '

프로세서의 생성과 죽음

  • 부모프로세스가 자신을 fork()해서 자신과 똑같은 걸 하나 만들고 exec() 내용을 덮어 씌운다.
    : fork를 하면 어쨌든 fork할 때 program counter가 가리키던 부분이 있을 텐데 그 내용도 다 복사되어 자식 프로세스에서도 pc가 가리킨 코드 다음 부터 실행된다.
  • 자식 프로세스와 부모 프로세스를 구분해주기 위해 fork뒤에 if문으로 pid 값을 확인한다. 자식 프로세스의 pid값이 0이다. - 기본적으로 프로세스는 부모와 자식이라 해도 cpu를 잡기 위해 경쟁해야 하는 관계이지만 여러 이유로 부모 프로세스가 자식 프로세스의 업무가 끝날 때까지 기다리기도 한다. 그 때 쓰는 것이 wait 시스템 콜이다.
    : cmd 창에서 입력을 받는 부분도 하나의 프로그램인데 우리가 프로그램 명령어를 실행하는 동안은 입력 커서가 없다. 그것은 부모 프로세스인 입력 커서 프로그램이 자식 프로세스인 우리가 입력한 프로그램이 실행될 때까지 기다리는 것이다.
  • 마지막 코드까지 수행되고 exit() 시스템 콜로 자발적으로 죽는다. 컴파일러가 알아서 넣어준다.
  • 강제로 죽는 경우가 있는데 그 중 한가지가 자식이 부모보다 먼저 죽는 것이 원칙이다. 부모는 자신이 죽을 때 자신의 자손의 자손의 자손을 먼 쪽 부터 순서대로 죽인다.

Thread란?

  • cpu 수행의 basic 단위다.
  • cpu 안에서 여러 쓰레드로 나뉘어 수행 단위가 여러개 있는 것이다 (cpu 수행 단위기 때문에 thread를 많이 가질 수록 빨라진다 > 일정 수를 넘어가면 빨라지지 못함)
  • 한 프로세스 내 여러 쓰레드
    : 함께 공유하는 부분 / 별도로 둔 부분 : 각 프로세의 주소공간에서는 data 부분과 code부분을 공유한다. stack부분은 쓰레드 마다 별도로 있다. : pcb에서 program counter가 어디 있는지 register에 뭘 백업해 놓았는지는 쓰레드 마다 다르다 / process id를 나타내주는 부분이라든가 프로세스 상태를 나타내는 부분, 리소스 부분은 공유한다.
  • 왜 필요하지?
    : 프로세스를 여러 개 만드는 것보다 쓰레드를 여러 개 만드는 것이 경제적이다.
    : 협력이 쉽다. 프로세스는 원칙적으로 독립적이고 cpu를 두고 경쟁하는 관계다. 협력이 쉽지 않다. 커널을 통해서 메시지 패싱을 하거나 / 커널에게 말해서 (처음에만 말하면 된다) memory를 share해야 한다.
    : cpu가 여러 개 달린 컴퓨터에서는 서로다른 cpu에서 실행이 가능하다.
    : 응답성이 올라간다. 사용자 입장에서는 쓰레드가 여러개면 한 쓰레드가 IO를 기다린다거나 하면 다른 쓰레드나 사용자에게 다른 데이터를 보여주면 되니 사용자 입장에서는 응답이 빨리 된다고 생각한다.
  • 그럼 다들 쓰레드 여러개 만들면 좋은 거 아닌가?
    : 노우.. 공유하는 부분이 많아 에러가 날 확률이 높다.

다른 좋았던 자료

https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://www.tutorialspoint.com/operating_system/os_process_scheduling.htm

Bad


Good


TODO

'기타 > TIL' 카테고리의 다른 글

210126 화 TIL  (0) 2021.01.26
210124-25 토일 TIL  (0) 2021.01.25
210121 목 TIL  (0) 2021.01.21
210120 수 TIL  (0) 2021.01.20
210119 화 TIL  (0) 2021.01.19
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함