오퍼레이팅 시스템

[OS] os 개요

유승혁 2022. 9. 13. 18:35

1. CPU와 메모리

 컴퓨터의 기본 재료?라고 할까. 다 중요하지만 두 가지만 고르자면, CPU와 Memory라고 할 수 있다. 

 - cpu: 명령어 처리 장치. 단지, 10010111 같이 들어온 명령어 bit를 해석하여 일련의 과정을 처리한다. 해석이라기 보다도 정해진 규칙에 따라 전기 신호를 줄지 말지를 결정하고 전기 신호에 따라 ALU들이 연산을 한다. 프로세서라고도 불린다. 최근에는 multicore가 기본적으로 시장에 자리잡고 있고 여기서 발생하는 다양한 이야기들이 펼쳐질 것이당.

 - 메모리: 유의할 점은 disk가 아닌 메모리. 즉 컴퓨터 꺼지면 날아가는 기억 장치이다. Static RAM(SRAM)과 Dynamic RAM(DRAM)으로 분류 되어 있다. 이때 RAM은 random access memory의 준말. 아래 표로 구분해보자. 추가적으로 Flash Memory도 있다.

특징/종류 SRAM DRAM Flash Memory
휘발성? YES YES NO
구성 transistor transistor, capacitor 플로팅 게이트 트랜지스터
속도 제일 빠름 중간 가장 느리게 빠름
가격                                             >                                              >   속도와 비례
주 사용처 cache main memory main memory 밑 계층

flash memory에는 크게 3가지 특징이 있다.

 * 읽는 것이 쓰는 것보다 빠르다.

 * 여러 page로 나뉘어 있는데 어느 page의 내용을 일부 수정 하고 싶다면 아예 처음부터 새로 써야 한다. 특정 부분만 수정 불가.

 * wear leveling 이라 부르는 기술이 있는데 page들은 각각 쓸(writing) 수 있는 횟수 제한 같은 것이 있다. 예를 들어 만 번 썻다 지웠다 하면 너덜너덜 해져서 사용 못하게 되는 것. 이를 위해 각 페이지들 마다 몇 번 wearing 했는지 횟수를 맞춘다.

추가적으로 충격에 강하다는 장점이 있어서 블랙박스 같은 곳에서 많이 들 쓰인다~~.

 

2. ISA

 instruction set architecture의 줄임말로서 컴퓨터 구조 관점에서 컴퓨터의 상태를 의미한다. 컴퓨터에는 데이터를 옮겨 담아줄 다양하고 수많은 register들이 존재한다는 것. 메모리에 올라와 있는 정보들. 즉, 컴퓨터의 상태는 register들과 메모리에 어떤 값들이 올라와 있느냐가 가장 중요하다. 그 값들을 기준으로 어떤 화면을 보여줄 지 어떤 연산을 할지 말을 할 수 있기 때문이다.

 명령어(instruction)의 경우 위에서 처럼 00101011 이런식으로 나타나고 각 bit가 의미하는 바가 존재한다. bit들에게 어떤 의미들을 부여할지로 CISC-RISC가 갈리기도 한다. 요 부분은 컴구에서 자세히 다룰께용~

 중요한 것은 명령어를 실행하는 것! cpu가 명령어를 찾아다니는 건 이미 충분히 바쁘기 때문에 곤난하고~ cpu는 가만히 있고 명령어들이 따박 따박 앞에 줄 서 야 한다. 이를 전문용어로 Fetch라 부르고, fetch된 명령어를 담아두는 바구니는 IR레지스터 이다. 그럼 바구니에 담는 것은 PC(program counter)에 적혀져 있는 명령어 주소(메모리 주소)에 해당하는 데이터를 담는다.

 정리하자면 cpu는 생각 없이 IR에 들어있는 명령어를 기준으로 register나 memory 값들을 읽고 쓰는 과정을 반복하고 PC는 다음 명령어가 저장 되어있는(메모리) 주소를 가리키고 있다. 그래서 명령어 처리 후에는 PC가 가리키는 데이터(명령어)를 IR로 옮기는 과정이 필요하다.

 

3. Disk

 비 휘발성 메모리로 컴퓨터 저장소 그 자체 이다. 광학, 자기력을 이용한 Hard disk drive들이 대부분이다. 메모리에 비해 굉장히 느리다. 하지만 컴퓨터에 disk 가 없다면... 게임 하려면 컴퓨터를 킬 때마다 설치해야 한다...헉

 flash memory를 이용한 solid state dist(SSD)라는 것도 있다. 일종의 interface 로서 flash memroy를 위에서 말한 3가지 특징을 없는 것처럼 하여 hdd처럼 사용할 수 있게 해준다. 해당 역할을 칭하는 이름으로 FTL이 있다.

 

4. PIC(Programmable Interrupt Controller)

 외부 장치(키보드, 마우스 등등)으로 부터 오는 신호(interrupt)는 어떻게 처리할까? CPU는 위에서 말한 과정을 계속해서 처리하다가, interrupt가 발생하면, interrupt에 맞는 service를 수행하는데, 이름은 ISR이다. 해당 내용은 자세히 뒤에서 다룰 것이니 넘어가고, 중요한 것은 여러 interrupt를 정리해주는 계층은 PIC가 있다. 모든 interrupt는 자신의 고유 번호를 가지고 PIC에 전달 된다. PIC에서는 CPU에 interrupt를 던져 주고 IRQ(interrupt 식별 번호)를 넘겨준다. cpu는 '알겠어! 처리할께' 라는 응답으로 ACK을 PIC에게 보낸다.

 

5. Interrupt

 그렇게 interrupt에 대해 다루어 보자. cpu는 자신의 작업을 반복적으로 하면서 interrupt가 왔는지 확인한다. interrupt가 발생 안했으면 하던거 하고 아니면 후처리 과정을 진행한다. 

 후처리 과정(interrupt service routine, ISR)을 이야기 해보자면, interrupt 처리는 굉장히 급한 것이기에 우선순위가 높다. interrupt 처리 하는 것을 뭐 어떤 특별한 CPU가 하는 것이 아니라 기존 사용하던 CPU가 해야 한다. 그렇기 위해 위에서 언급한 ISA 관점에서 PC와 register 값들을 메모리(kernel stack)에 저장 해야한다. 그 이유는 interrupt 처리 이후에 이전 task를 계속 처리해야 할 수도 있기 때문이다. 예를 들어 자장면 만들다가 급하게 들어온 짬뽕을 만들어야 한다는 이유로 지금껏 만든 자장면을 엎어버릴 수는 없다. 옆에 잠시 치워 두고 짬뽕 다 만들면 다시 자장면을 만들어야 하기 때문이당.

 이후 PSW(kernel 모드인지 user 모드인지 식별해주는 register)를 kernel mode로 바꾸고 interrupt 별로 처리해야할 명령어를 PC가 가리키게 한다. 그렇게 PC가 가리키는 명령어를 IR에 fetch해 주면 후처리가 시작 되는 것이고 후처리 이후에 kernel stack에 저장했던 이전의 ISA 정보를 가져와서 원래 하던 일을 마저 진행한다. 물론 어떤 interrupt 결과 지금 실행 중인거 중지! 같은 것이 있어서 이전 task가 다시 실행되지 않기도 한다.

 또한 이 ISR 과정은 user mode가 아닌 kernel mode에서 실행 되야 하기 때문에 mode switch가 일어난다.

 

5.1 interrupt 종류

interrupt에는 크게 3가지 종류가 있다. exception - system call - interrupt로 나뉘지만 systema call과 exception은 거의 같다고 보기도 한다. 셋다 발생 직후 처리 과정은 위에서 말한 것과 똑같다. 아무튼 이제 exception과 interrupt를 구분해보자.

구분 interrupt exception
근원지 cpu 외부 cpu 내부
방식 명령어 처리 후에 신호들 확인 명령어 실행 중에 안되는 것들 처리
(divide by zero)
clock과 동기화 여부 sync async
후처리 시점 현재 명령어 끝나면 현재 명렁어 실행 도중

 

6. 메모리 계층구조

메모리 관련해서 지겹도록 나올 이야기가 있다. locality! 메모리 계층 순서는 이와 같다. register > cache > main memory > disk 와 같은 방식으로 있다. 아래 계층으로 내려갈 수록 가격은 저렴해지고 용량은 커지지만 속도가 느려진다. register는 정말 cpu 옆에 붙어 있으니 왔다갔다의 시간 조차 없다.

 아무쪼록 이걸 하는 가장 큰 목적은 locality를 이용한 virtual 공간을 설계하는 것이다. 마치 학교 사물함과 책상 사물함이랑 같다. 각 수업마다 필요한 교과서, 노트가 있다고 하면 책상 사물함으로는 다 갖고 있기 불가능 하다. 그래서 수업 시간마다 필요한 준비물을 책상 사물함에 넣어 두고 꺼내 쓰는 거랑 같다. 사물함에 왔다갔다 할 시간 없이 책상에 앉아있기만 하면된다.

 여기서 locality란 무엇이냐면, 방금 참조한 것은 다시 참조한다는 성질과 참조한 것 주변의 정보를 참조할 가능성이 높다는 통계적 성질을 의미한다. 그래서 책상 사물함에 어떤 데이터를 넣을지를 결정하는 속성이라고 생각하면 된다.

 이러한 계층 구조 성격이라던지 설계 방식에 대해서 컴퓨터 구조 글에서 자세히 다룰 테니 기다려 달라.

 대신 cache와 main memory 관게에 대한 이야기만 간단하게 하겠다. main memory가 사물함, cache가 책상 사물함 인거다. main memory의 어떤 주소에 대한 데이터가 필요한데 cache에 해당 정보가 있다면! 대박s hit다 hit! 이고 없다면 아쉽다.. miss.. 라고 부른다. hit 되면 굳이 main memory 의 데이터를 확인하러 가지 않아도 되니! 굉장한 이득인 것이다.

 이때 읽기에 대해서는 해당 되지 않는 문제인데, 쓰기와 관련해서 문제가 생긴다. cache 데이터의 정보를 수정할 때 main memory에 저장되어 있는 정보도 수정한다면,, 꽤나 비효율 적일 것이다. 그래서 write back이라는 전략을 많이들 사용하는데, 일단 cache 데이터를 수정했다면 dirty bit라는 녀석을 1로 만들어 주고 나중에 cache에 있던 데이터가 교체되거나 여러 이유로 cache 에서 내려가게 된다면 그제서야 main memory에 반영하는 것이다~

 

7. I/O 통신 방식

 device에서 memory로 올리는 과정에 대한 이야기이다. device란 키보드, 마우스도 있지만 disk를 의미하기도 한다.

 - Polling(programmed) I/O: cpu가 loop를 돌면서 I/O가 발생했는지 확인한다. device 처리가 단순하고 빠릿빠릿하게 온다면 꽤 괜찮다. 

 - Interrupt-Driven I/O: device와 메모리 사이에서 꽤 큰 data가 움직이게 될때는 interrupt를 이용하여 I/O처리를 진행한다. 이 interrupt를 처리하는 것은 mode switch가 필시 일어나기 때문에 cost가 크다. 그러하니 자잘자잘한 I/O를 interrupt 기반으로 하기에는 너무 큰 낭비이니 잘 고려해야 한다.

 - DMA: 어어엄청 큰 data의 경우(block 단위)는 cpu가 처리하는데 꽤나 오래 걸릴 것이다. 그럴때를 위해 CPU는 자기 일을 하고 DMA controller가 I/O 일처리를 대신 해준다. 마치 I/O 전용 cpu가 존재하는 거라고 생각하면 된다.

 

'오퍼레이팅 시스템' 카테고리의 다른 글

[OS] 동기화  (2) 2022.09.19
[OS] 스레드  (1) 2022.09.16
[OS] 스케줄링  (1) 2022.09.15
[OS] 프로세스  (0) 2022.09.14
[OS] 자원 보호와 시스템 콜  (0) 2022.09.13