2022. 11. 23. 03:21ㆍ수업/운영체제
어플리케이션 소프트웨어
: 고급언어로 작성된 것
--> 고급 언어가 low-level language로
--> 하드웨어에서 알아먹을 수 있게
시스템 소프트웨어
: 컴파일러 --> HLL코드(High level language코드)를 기계어로
--> Operating system : 하드웨어 관리를 추상화 --> 입출력관리 / 메모리와 스토리지 관리 / task 스케쥴링과 리소스할당
즉, OS는 시스템 소프트웨어의 일종
인터페이스?
유저가 사용하는 대상 내부 디테일을 몰라도 쉽게 사용할 수 있도록 연결시켜주는 것
--> OS는 하드웨어를 모름에도 불구하고 메모리 관리등을 가능하게 하기에 인터페이스라고 볼 수 있다
OS의 두 가지 관점
--> 하드웨어 자원을 효율적으로 관리 --> 1. 성능 최대화
--> 하드웨어 자원을 공정히 배분 --> 2. 사용자 경험 보장
OS의 종류
1. 얼마나 많은 수의 유저가 동시에 사용가능한가에 따라
: single user system / multi user system
single user system
: 오직 동시에 한 유저만이 컴퓨터 시스템에 접근가능
--> 심플하지만 성능이 제한 / MS-DOS, Windows, Mac OS 등
multi user system
: 동시에 여러명의 유저가 컴퓨터 시스템에 접근 가능
--> 복잡하다 / 각각의 task에 대한 스케쥴링이 필요 / 각 유저들 간 보호와 인증관리가 필요 / 전체 성능을 향상시킬 수 있음 / Unix, Mainframe, WIndows NT, Linux
2. 얼마나 많은 수의 task가 동시에 수행될 수 있는지에 따라
: single tasking system / multi tasking system
single tasking system
: 동시에 오직 한 프로그램이나 어플리케이션만 실행 가능 / MS-DOS, Windows cmd
multi tasking system
: 동시에 복수의 어플리케이션이나 프로그램이 실행 가능 / 현재 OS들-Linux, Unix, windows,,
오픈소스 시스템 / closed source 시스템
오픈소스
: 비용없는 소프트웨어 / 소스코드 변경에 아무런 제한을 두지않음 / 소스코드는 오픈되어있음
클로즈소스
: 비용 내고 사용하는 소프트웨어 / 소스코드가 변하지 않음, 그렇기에 안전
1. Monolithic Kernel
: OS에 필요한 모든 기능들이 하나의 커널로 구성된 커널 / 규모가 크고 단일 프로세스가 단일 주소에서 / 커널 주소 공간에서 모든 커널 서비스가 존재하고 사용된다 / 각 컴포넌트는 효율적으로 소통(빠름) / disk driver 추가, 삭제가 어렵고 유지 어려움(크기 때문에) / ex. Unix, Linux
2. Micro Kernel
: 가장 필요한 것들만 넣고 나머지 것들을 모듈화시켜 OS위에 올려 쓸 수 있게 한 것 / 각 프로세스로 세분화하는데 이를 서버라 함 / 모든 서버는 개별적이고 다른 공간에서 구동 / 서버는 IPC를 통해 호출 / ex. Mac OS X, Windows NT / MINIX
3. Hybrid Kernel
운영체제의 역사
1. serial processing ~ 1950s
: 하드웨어가 비싸고, 인력은 저렴했던 시기 / 목표 : 하드웨어를 좀더 효율적으로 사용하자 / 이때는 운영체제라고 할 것이 없었다 / 기계어로 된 프로그램들 - 한 프로그램은 컴퓨터 사용에 필요한 모든 것들을 포함하고 있어야 했다 - 한 콘솔당 한 유저, 디버깅은 오프라인에서 / 느린 업무 순서전환
2. batch processing ~ 1960s
: 모든 프로그램들과 데이터를 batch 단위로 묶고, 프로세스를 구동시키려 시도 - JCL(Job Control Language)라 하는 특별한 프로그래밍 언어 사용, setup과 takedown 시간을 줄임으로써 cpu 이용률을 향상 / 예로 모니터는 심플 스케쥴러 역할 - Memory protection, timer, instructions, interrup가 포함 / 메모리와 프로세스 시간이라는 두가지 / 하지만 아직 하나의 업무만 처리 - 그래서 이용률이 때로 여전히 나빴음
파일에서 한 레코드를 읽어옴 - 15마이크로초
이에 따라 프로세서가 100가지 동작을 수행 - 1마이크로초
파일에 한 레코드를 씀 - 15마이크로초
--> cpu 이용률?(사용률 utilization) = 1 / 31 = 0.032 = 3.2%
--> cpu 실제 작동 시간
하지만 이러한 batch processing 하면서 I/O 요청이 들어오면 cpu 작동시간이 더 줄어든다는 점
이를 해결하기 위해? 1. 제거하거나 2. 겹쳐서 동시에 수행하거나
그래서 위 처럼 I/O 요청에 따른 시간을 겹쳐서 동시에 다른 작업을 cpu가 수행하고 있는 Multiprogramming batch processing 등장(이러한 multi programming과 반대되게, 하나가 끝나야 하나를 처리하는 것을 unit programming이라 한다)
3. Multiprogramming batch processing 1960 ~ 1970s
: 여러 유저가 시스템을 공유 - 프로세서가 job들 간 switch를 통해서 복수의 batch 프로그램들을 동시에 수행하려 함 / 고비용의 I/O를 오버랩하여 cpu utilization을 극대화 / 메모리 보호와 재배치 / 동시 프로그래밍 필요 / 여러 기준에 따라 job scheduler이 job을 구동
I/O의 두 타입
- Synchronous I/O(동기 I/O)
: I/O가 시작되면, I/O 요청이 끝날 때 까지 기다림 / CPU가 I/O를 관리하여 다른 연산 수행 불가
- Asynchronous I/O(비동기 I/O)
: IO가 시작되면, I/O 요청이 들어가는데 각 하드웨어가 I/O를 제어할 수 있어 CPU가 I/O를 관리하지 않아 미뤄두었다 처리가능
Base/bound register
: 메모리 내 주소관리와 연관,
이런 상황에서 3000을 base register로 가지는 부분에 무언가를 쓴다?
--> OS가 거부, 다른 job들이 참견 하지 못하게
--> Relocation + base/bound register 알고 있기
4. Time-sharing processing 1970 ~ 1980s
: Batch-multiprogramming system의 확장시켜 cpu가 여러 job들의 switch를 자주 실행해서 다수의 유저들이 기다림 없이 처리가 가능해져 사용자 경험이 좋아져 interactive한 컴퓨팅 가능 / 시스템 시간은 interrupt를 생성 - 어떠한 시간이 되면 다른 job으로 넘어가는 time slicing -- Job & process scheduling(round-robin) / 만약 프로세스가 메모리에 맞지 않는다면 부분적으로 실행(Virtual memory and disk management)
Real time system
--> deadline즉, 보장된 시간하에 프로그램을 수행하는 것
--> Hard real-time system / Soft real-time system
--> Hard real-time system : 데드라인을 꼭 보장함, 아니면 큰 위협이 잇따르는 프로그램에
--> Soft real-time system : 안지키면 재앙수준은 아니고 짜증정도 - 사용자 경험(Qos-Quality of Service)에 해가 되는 정도서 -- if QoS가 99%면 100번 중 99번 정도는 deadline을 준수하지만 한 번은 못할 수 있는
운영체제의 세 주요 특징
: Virtualization / Concurrency / Persistence
CPU Virtualization
: 물리적으로 cpu는 1개로 제한되어 있지만 논리적인 기법을 통해 cpu가 무한개 있는 것 처럼 느끼게 해주는 illusion을 제공하는 것
--> phisycal cpu는 한개 지만 logical cpu가 무한 개 인것 처럼
Memory Virtualization
: 제한된 메모리를 무한대의 용량인 것 처럼 느끼게 하는 illusion을 제공하는 것 --> cpu와 소통하기 위해서는 메모리에 프로세스가 올라가있어야 하는데 용량이 제한되기에 중요부분만 올려쓰면서 virtualization 가능
--> cpu가 메모리를 인식하는 것은 바이트의 배열로 봄(physical memory)
Concurrency
: 수행 순서에 따라 process A나 process B의 값이 달라질 수 있는데, 이러한 부분을 어떻게 보호할 지
Persistence
: DRAM같은 디바이스들은 값을 저장하는데 취약할 수
--> 어떻게 일관성을 가지느냐
Computer system - mode bit
: CPU 모드를 저장하는 역할의 레지스터
--> 두 가지 모드 존재
Mode bit이 0일때 --> 커널모드
Mode bit이 1일때 --> 유저모드
(1) Kernel mode
: cpu에 대한 권한을 OS가 갖고 있는 모드 --> 대개 하드웨어 resource와 관련된 제어를 할 땐 커널모드 --> 시스템 보호 위함 --> 하드웨어 디테일을 모르는 유저에게 맡기지 않고 보호하기 위해
(2) User mode
: cpu에 대한 권한을 유저가 갖고 있는 모드로서, cpu에서 유저 프로그램이 돈다
--> cpu제어에 대한 전문성이 떨어져 문제일으킬 수 있음,
--> 시스템 콜? OS가 정해둔 경로로 유저가 접근할 수 있도록 하는 것
--> 즉 Interrupt나 system call이 발생 시 mode bit이 1(유저모드)에서 0(커널모드)로 변경
dualmode?
--> OS스스로 보호, 혹은 시스템 컴포넌트 보호를 위해
Computer system - Timer
: 특정 주기로 cpu에 interrupt 거는 것
--> Timer에서 정한 주기인 time slice의 한 번이 끝나면 현 프로그램이 아닌 다음 프로그램에 CPU권한 부여 --> mode bit 변경함(유저모드 - interrupt후 커널모드 - 다시 유저모드)
I/O device controller
: 인풋 아웃풋 버스를 가지고 있는 하드웨어 유닛으로, 컴퓨터와 I/O디바이스 간 인터페이스가 된다
--> I/O device는 작은 타입의 cpu를 가지고 있다 --> device controller와 local buffer
--> I/O device가 작은 컴퓨터라 한다면, 이를 구동시키기 위한 프로그램이 필요, device driver이 그것 --> 컴퓨터 시스템 구동위한 작은 형태의 OS
Asynchronous Exception: Interrupt
: 프로세서의 interrupt pin에서 / 예기치 않게 작동 / 다음 동작을 수행 / ex. Timer Interrupt , I/O interrupt from external device
Synchronous Exception
: 어떠한 동작 이후의 결과로서 야기되는 이벤트, cpu 스스로 발동시킴
--> Traps / Faults / Aborts
Traps?
--> 유저가 의도한 것
--> ex. 시스템 콜
--> 다음 동작을 수행
Faults?
--> 의도치 않은 실수, 하지만 회복가능
--> ex. page faults --> 더하기 연산서 데이터가 메모리 없어 멈추고, 이후 OS 도움을 받아 데이터 도착하면 미처 못했던 연산 수행
--> 이전에 미처 끝내지 못한 명령을 재수행(현재 명령 재수행)
Aborts?
--> 의도치 않은 실수, 복구 불가
--> 현재 프로그램을 멈추는 방법밖에 없다
레지스터 - pc, psw
pc : cpu가 처리해야 할 명령어가 있는 주소를 가짐
psw : mode bit - 여기선 1 상태(유저모드 - 우리가 짠 프로그램 수행중)
--> cpu는 항상 Interrupt line에서 신호가 오는지 체크
--> 각 I/O 디바이스는 각각 넘버를 갖고 있기에 cpu는 어디서 interrupt 신호 오는지 확인 가능
--> 해당 예제에선 14 --> 이렇게 interrupt 떴으니 os가 모드를 가지기에 psw가 0으로 변화
--> 14번에 들어가면 솔루션 코드가 몇 번에 있는지 가리키는 exception table로 이동
--> 456번에 가면 pc도 456으로(수행해야 하므로)
--> 수행 끝난 후? 다음문장 실행(interrupt)
--> 다시 유저모드로 - psw가 1로, pc 1004로 변경
context
: 어떤 명령어를 수행하기 위해 필요한 레지스터 명령어(프로세스 수행위해 중단되었던 때 부터 필요한 정보나 시행시 필요한 정보)
context switch
: 한 프로세스를 멈추고 재수행 하기 위해선 현재 context를 저장해두고, 다음에 수행해야 할 프로세스의 저장해둔 context를 다시 불러옴 --> 그러니, exception이 일어나면 context switch도 OS가 수행
--> time sharing 에서 time slice너무 짧게 잡으면 비효율적으로 될 수 있는 근거
DMA(Direct Memory Access)
: CPU는 DMA와 직접 소통
--> 만약 cpu만 있다면(DMA 없다면) 연산 후 출력을 위해 버스에 데이터를 직접 CPU가 데이터를 태워야 하는데 DMA가 있다면 거기 접근해서 명령만 하면 끝
--> DMA는 cpu 수행동작 없이도 memory와 소통가능케(데이터 이동) 해준다
--> 고로 DMA를 사용하면 cpu가 수행할 수 있는 연산시간이 늘어나는 이점
Operation mode - 수행모드 종류
--> Burst / Cycle steal / Transparent
--> Burst : DMA가 여러 사이클을 cpu로 부터 전달받아 사용
--> Cycle steal : cpu와 한 사이클씩 돌아가면서 system bus를 사용(소량만 옮길 수 있음)
--> transparent : cpu가 아예 system bus사용하지 않을 때만 사용
DMA
장점 : 성능 뛰어남
단점 : 하드웨어 추가해야한다는 비용추가의 단점
Bus
노스브릿지 : cpu, dram, 그래픽카드와 같이 상대적으로 빠른 처리(비싼)것들을 빠른 버스로 연결할 때 사용
사우스브릿지 : usb등 외부장치같은 상대적으로 느린 처리(저렴)것들은 느린 버스로 연결할 때 사용
'수업 > 운영체제' 카테고리의 다른 글
Operating System - Segmentation[Memory Virtualzation](5) (0) | 2022.12.22 |
---|---|
Operating System - Address Space[Memory Virtualzation](4) (0) | 2022.12.22 |
Operating System - CPU Virtualization & Scheduling(3) (1) | 2022.11.23 |
Operating System - CPU Virtualization(2) (0) | 2022.11.23 |