2021-9-26 운영체제 (3주차)
프로그램의 실행
- 프로세스마다 가상 메모리 주소가 있다
- 논리적 메모리 주소와 물리적 주소가 다르기에 Address translation 주소 변환이 필요하다.
- 메모리 데이터를 써야할 때 - data영역에 위치
- virtual memory는 코드 데이터 스택으로 구성되어있다
- 운영체제의 IO 등 위한 시스템콜 코드, 인터럽트 처리코드가 코드영역에 있음
- data영역에는 모든 하드웨어들을 관리하기 위한 자료구조를 가지고 있음, 실행중인 모든 프로세스를 관리하기 위한 자료구조(ProcessControlBloc?)를 가지고 있다.
- 운영체제의 stack - 각 프로세스마다 별도로 있다
- 프로그램 A가 실행되다가 운영체제 호출 - A의 커널 스택을 사용
함수
- 사용자 정의 함수
- 자신의 프로그램에서 정의한 함수
- 라이브러리 함수
- 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수
- 자신의 프로램의 실행 파일에 포함되어 있다.
- 커널 함수
- 운영체제 프로그램의 함수 - 커널 코드에 들어있다
- 커널 함수의 호출 = 시스템 콜
- 내가 정의한 함수나 라이브러리 - user mode 에서 실행
- System call을 부르면 커널모드로 바껴서 호출
프로세스
-
실행중인 프로그램
-
프로세스의 문맥(context) - 프로세스의 현재 상태를 나타내는 정보들
- CPU 수행 상태를 나타내는 하드웨어 문맥
- Program Counter - 어디를 실행하고 있는지
- 각종 register - 레지스터에 어떤값을 넣고 있었는지
- 프로세스의 주소 공간
- code, data, stack - 함수를 몇개를 호출했고 어디를 나타내고있는지…..
- 프로세스 관련 커널 자료 구조
- PCB - 각각의 프로세스를 운영체제가 관리하면서 가지고 있는것
- Kernel stack - 프로세스마다 별도의 커널을 쓰기에 - 프로세스의 현재상태의 정보를 가짐
- CPU 수행 상태를 나타내는 하드웨어 문맥
프로세스의 상태
- Running - CPU를 잡고있는 상태
- Ready - CPU를 기다리고 있는 상태
-
Blocked - CPU를 주어도 당장 instruction을 수행할 수 없는 상태 - ex) 디스크에서 file 을 읽어와야 하는 경우, Process 자신이 요청한 event가 즉시 만족되지 않아 이를 기다리는 상태
- Suspended (stopped)
- 외부적인 이유로 프로세스의 수행이 정지된 상태
- 프로세스는 통째로 디스크에 swap out 된다
- ex) 사용자가 프로그램을 일시 정지시킨 경우, 메모리에 너무 많은 프로세스가 올라와있어서 프로세스를 중단시킬때
Process Control Block (PCB)
- OS가 관리상 사용하는 정보
- Process state, Process ID
- scheduling infomation - 우선순위, priority
- CPU 수행 관련 하드웨어 값
- Program counter, register
- 메모리 관련
- Code, data, stack의 위치 정보
- 파일 관련
- Open file descriptors
문맥교환 context switch
- CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
- CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행
- CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
- CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
스케줄러 (Scheduler)
운영체제 안의 코드 중 일부
- Long-term scheduler(장기 스케줄러 or job scheduler)
- 프로세스에 memory를 주는 문제
- degree of Multiprogramming을 제어 - 메모리에 올라간 프로그램이 몇개냐 를 관리
- time sharing system 에는 보통 장기 스케줄러가 없음
- Short-term sheduler(단기 스케줄러 or CPU scheduler)
- 어떤 프로세스를 다음번에 runnung 시킬지 결정
- 프로세스에 CPU를 주는 문제
- 충분히 빨라야함
- Midiun-term Scheduler(중기 스케줄러 or Swapper)
- 여유공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
- degree of Multiprogramming을 제어
Thread 쓰레드
- Thread 의 구성
- Program counter
- register set
- stack space
- Thread 가 동료 Thread와 공유하는 부분( = task)
- code section
- data section
- OS resources
- 다중 스레드로 구성된 태스크 구조에서는 하나의 서버 스레드가 blocked 상태인 동안에도 동일한 태스크 내의 다른 스레드가 실행되어 빠른 처리를 할 수 있다.
- 동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율과 성능 향상을 얻을 수 있다
- 스레드를 사용하면 병렬성을 높일 수 있다.
쓰레드의 장점
- 빠른 응답성
- 자원 공유의 효율성 - 동일 프로세스 안의 쓰레드는 서로 공유하기에
- 쓰레드 하나 만드는게 프로세스 하나 만드는것보다 효율적이다, 시간차이 많이난다함
프로세스 생성 (Process Creation)
- 부모 프로세스가 자식 프로세스를 생성 - fork() 라는 시스템콜을 통해서
- 프로세스의 트리(계층 구조) 형성
- 프로세스는 자원을 필요로 함 - 운영체제로부터 받는다, 부모와 공유한다
-
자원의 공유
- 주소공간
- 자식은 부모의 공간을 복사함
- 자식은 그 공간에 새로운 프로그램을 올림
프로세스 종료
- 프로세스가 마지막 명령을 수행한 수 운영체제에게 이를 알려줌(exit)
- 자식이 부모에게 output data를 보냄
- 프로세스의 각종 자원들이 운영체제에게 반납됨
- 부모 프로세스가 자식의 수행을 종료시킴(abort)
- 자식이 할당 자원의 한계치를 넘어설때
- 자식에게 할당된 태스크가 더 이상 필요하지 않음
- 부모가 종료(exit)하는 경우
Written on September 26, 2021