운영체제 3강

컴공거북이·2024년 5월 16일

운영체제

목록 보기
2/9

<3강>

<프로세스 구성요소>

1)프로그램 코드(text section)
2)program counter, register등을 포함한 활동
3) 임시 데이터가 저장된 스택(parameter, return address, local variables 등)아래 방향
4) 전역변수가 포함된 데이터
5) 동적으로 메모리를 할당하는 힙(위 방향)

<프로세스 상태>

생성상태: 프로세스 생성
준비단계 : 프로세스가 cpu에 할당되기를 기다리는 상태
실행단계 : 명령어 실행 단계
대기단계 :프로세스가 어떤 이벤트를 기다리고 있는 상태
종료단계 : 프로세스 실행을 마친 상태

*디스패치: 어떤 메소드를 호출할 것인지 결정하여 실행하는 것

<process control block(PCB)>

-프로세스의 정보를 저장해놓은 곳(메모리)
1) 프로세스 상태 ex)프로세스가 실행중인지 대기중인지
2) 프로그램 카운터
3) CPU 레지스터 ex)프로세스와 관련된 모든 레지스터
4) CPU스케줄링 정보 ex)우선순위, 스케줄링 큐 포인터등
5) 메모리 관리 정보 ex) 프로세스에 할당된 메모리 영역 정보
6) accounting 정보 ex)cpu 사용시간 , 시간 제한 등
7) I/O 상태정보 ex)할당된 I/O장치, 열린 파일

<스레드(Threads)>

하나의 코어안에서 실행되고 있는 일의 단위

<스케줄러>

어떤 프로세스를 실행시킬 건지 결정하는 소프트웨어

<Short-term 스케줄러, CPU 스케줄러>

메모리에 있는 프로세스 중 다음에 실행할 프로세스를 정하고 CPU를 할당
자주 호출되기 떄문에 빠르게 실행되어야 함

<Long-term 스케줄러, job 스케줄러)

디스크에 있는 프로세스 중 메모리 안에 들어올 프로세스 정하기
드물게 호출되고 상대적으로 느림
멀티프로그래밍의 정도를 제어
(I/0-bound 프로세스 - 연산보다 입출력 작업에 더 많은 시간 소비, 짧고 잦은 CPU사용시간)
(CPU-bound 프로세스 - 입출력 작업보다 연산에 더 많은 시간 소비, 길고 cPU 사용시간)

<Medium-term 스케줄러>

멀티 프로그래밍의 정도를 줄어주는 역할
디스크에서 프로세스의 일부를 메모리에 불러오고 실행이 끝나면 다시 디스크에 저장시키고 또 디스크에서 프로세스의 일부를 메모리에 불러오고 실행이 끝나면 다시 디스크에 저장시키는 과정을 반복(swapping) - 프로세스를 조금씩 들고와 실행

<CPU 스케줄러>

  • CPU 스케줄러는 다음과 같은 여러 스케줄링 큐를 유지
    1)job 큐 - 보조기억장치에 있는 프로세스 중 메인 메모리에 들어가기 위해 기다리고 있는 프로세스 큐
    2) ready 큐 - 메모메모리에서 CPU할당을 기다리고 있는 프로세스 큐
    3)device 큐 - I/0 장치를 기다리는 프로세스 큐

큐 다이어그램은 1)큐,2)자원,3)흐름을 나타냄

<문맥교환>

CPU가 현재 작업 중인 프로세스에서 다른 프로세스로 넘어갈 때 이때까지의 프로세스의 상태를 PCB에 저장하고, 새 프로세스의 저장된 상태(PCB)를 다시 적재하는 Context Switch(문맥교환)이라고 한다.
오버헤드

<프로세스 생성>

부모 프로세스는 자식 프로세스를 생성하고 또 자식이 자식을 낳아 프로세스 트리 생성
일반적으로 PCB의 PID를 통해 프로세스 식별

-자원공유 옵션

부모와 자식이 모든 자원 공유
자식이 부모의 다른 자식과 자원공유
자식이 부모와 자원 공유 X

-실행옵션

부모와 자식이 동시에 실행
부모는 자식이 종료될 때까지 기다름

-주소공간

부모가 자신을 복제하여 자식을 생성 - fork()
프로세스의 주소공간에 다른 프로그램을 덮어쓰기 - exec()

<프로세스간 협력>

하는 이유:
1)정보공유
2)계산속도 향상
3)모듈화를 하기 위해서
4)편리

협력프로세스에서 프로세스 간 통신(interprocess communication)(IPC)이 필요
IPC

1)message passing:

공유되는 메모리가 없기 때문에 동기화 필요없음
적은 데이터 간단하게 처리가능
분산 시스템인 경우 편리
커널 간섭이 높아서 오버헤드 큼

2)shared memory

많은 양을 보낼 수 있음
커널 간섭적음
user가 동기화해주어야함
캐시의 일관성을 유지해야함

<공유메모리를 가지고 버퍼를 구현한 경우 >

동기화
user에 의해 관리가 되어야하기 때문에 동기화 역시 user가
1) producer가 버퍼가 가득찬 경우 기다리고
consumer가 버퍼가 빈 경우 기다리는 동기화 필요
2)같은 부분을 producer/consumer 둘다 접근하는 경우 동기화 필요

<Synchronization - 동기화> - message passing

동기화란? 여러 프로세스가 공유하는 자원의 일관성을 유지하는 것
blocking(동기화로 간주)
blocking send- 보내는 사람은 메세지를 받을 때까지 기다려야 함
blocking receive - 받는 사람은 메세지가 자기 버퍼에 들어올 떄까지 기다려야 함

nonblocking(비동기화(asynchoronization) 간주) - 메세지 통신과 자신의 일 동시에 수행가능

profile
잘못된 정보가 있을 경우 언제든 댓글로 남겨주세요 :) 감사합니다!!

0개의 댓글