효율성
형편성 있는 자원 분배
주어진 자원으로 최대한의 성능을 내도록
하드웨어 뿐만아니라 소프트웨어 자원 등을 관리
Multitasking
Multiprogramming
Time sharing
Multiprocess
멀티 스레드 와 멀티 프로세스의 차이?
프로세스의 경우 실행중인 프로그램을 의미하고,
스레드는 프로세스 안에서 작동되는 실행단위라고 이해하면 편하다.
프로세스는 메모리와 CPU를 프로세스마다 할당받아서 사용하는데 스레드의 경우 프로세스 안에서 다른 스레드와 스택영역을 제외한 메모리와 CPU를 공유해서 사용합니다.
멀티 프로세스는 독립적인 프로세스로 간주되며 별도의 메모리 공간을 가지고 있습니다. 프로세스간 전환시 처리시간이 오래걸리며 메모리 효율성이 떨어질수도있습니다.
멀티 쓰레드의 경우 하나의 프로세스 내에서 실행되는 여러 스레드로 같은 메모리,CPU공간을 공유하여 데이터가 공유가 쉽습니다. 그렇기 때문에 시스템 자원과 메모리 공간을 더 효율적으로 활용할 수있습니다. 하지만 각 스레드가 동일한 주소 공간을 공유하므로 동기화 문제를 고려해야합니다.
컴퓨터가 이해하는 두가지 정보 : 데이터
컴퓨터의 네 가지 핵심 부품
1. CPU
- ALU(산술논리연산장치) : 계산기
- 레지스터 : CPU 내부의 작은 저장장치
- 제어장치: 제어 신호를 내보내고, 명령어를 해석하는 장치
- mode bit : 운영체제인지 사용자 입출력장치인지 구분해줌
- 1 - 사용자모드 : 사용자 프로그램 수행
- 0 - 모니터모드(커널 모드, 시스템모드) : OS 코드 수행
0일때는 운영체제가 cpu를 가지고 있기 때문에 모든게 가능
1일때는 사용자 프로그램이 cpu 가지고 있어 제한된 성능만 수행
- loop 일 경우 특정 프로그램이 CPU독점하게됨
→ timer의 역할 : 셋팅된 시간만큼의 cpu독점시간을 제어함 → CPU의 time sharing을 위한 시스템
DMA(Direct Memory Access) : 직접 메모리 접근 컨트롤러
- 데이터 동시접근 조절해줌
- I/O장치가 너무 많이 interrupt 많이 걸어 CPU가 작은일 하나하나 넘어가 효율적으로 작동 못함
- local buffer에서 데이터가 쌓일 경우 CPU에게 전달함
저장장치 계층 구조
프로그램의 실행
1-1. 커널 주소 공간의 내용
code(커널 코드)
data
stack
2) 사용자 프로그램이 사용하는 함수
함수(function)
1- 프로세스의 Address space의 code에 저장됨
사용자 정의 함수
라이브러리 함수
2- 운영체제 안에서 정의 된 함수 kernel내부에 정의 됨
컴파일
1. 컴파일러는 고급 언어(소스 코드)를 저급언어(목적 코드)로 컴파일 해줌
2. 소스 코드 자체를 한번에 컴파일 하기 때문에 소스 코드 컴파일 중 오류가 발생하면 소스 코드 전체가 실행되지 않음
인터프리트 언어
1. 인터프리터에 의해 한 줄씩 실행!! → 소스코드 전체가 저급 언어로 변환되기를 기다리지 않아도됨
2. 소스 코드가 한줄씩 인터프리트해주기 때문에 중간에 오류가 발생하면 정확히 어디가 잘못되어있는지 알 수 있음
문맥 교환
프로세스를 진행하기 위한 큐
스케쥴러
- Short-term schedluer(단기 스케쥴러 or CPU scheduler)
- 어떤 프로세스를 다음번에 running시킬지 결정
- 프로세스에 CPU를 주는 문제
- 빨라야됨
- Long-term scheduler(장기 스케줄러 or Job scheduler)
- 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
- 프로세스에 memory을 주는 문제
- degree of Multiprgramming을 제어(메모리에 올라간 프로그래밍 수를 제어)
- time sharing system에는 보통 장기 스케줄러가 없음
- Medium-Term Scheduler(중기 스케줄러 or Swapper)
Thread
CPU수행에 관련 정보
program counter, register, stack을 각 Thread마다 가지고 있음
Process안에서 공유되는 부분 code section, data section, OS resources
장점