학부시절부터 운영체제란 과목에 항상 관심이 있었습니다..!(뭐 때문인지는 모르겠지만 '운영체제'라는 단어에서 오는 설렘?) Show 컴공이 아닌 저에게 운영체제란 과목은 옆학과가서 친구도 없이 교양으로 수강해야 가능한 그런 꿈의 과목이었습니다. 물론, 학점의 압박에 못이겨 타학과 전공을 듣는 것을 포기했습니다 개발자 면접을 준비하면서 운영체제라는 것을 알아야 한다는 즐거운(?) 소문을 들었고, 공룡책을 기반으로 하는 좋은 무료강의를 찾아 공부해보려고 합니다. 운영체제 공룡책 강의 👈 무료입니다 시작!1. 운영체제(OS)운영체제 많이들 들어봤을 거라고 생각합니다. 초딩 때 준비했던 '워드프로세서 1급' 같은 필기시험에도 등장해서 무지성으로 외웠던.. 어디선가는 무조건 들어봤을 그런 단어입니다. 우리가 흔히 사용하는 window나 서버에서 많이 사용하는 linux를 운영체제라고 부릅니다.
풀어보면, 운영체제는 컴퓨터 시스템을 작동시키는 소프트웨어라는 뜻을 가지고 있습니다. 1.1 컴퓨터 시스템은?그럼 컴퓨터는 무엇인가요?
컴퓨터는 정보를 처리하는 기계입니다. 1.2 그래서 어떻게 컴퓨터가 정보를 처리해?컴퓨터는 bit 단위로 정보를 처리합니다. 즉, 10101과 같은 이진수로 이해를 하고 처리를 합니다. 1.3 컴퓨터는 누가 만들었지?컴퓨터의 할아버지는 앨런 튜링은 튜링머신을 개발했습니다.
명령어 세트 구조라는 것을 개발했는데 이것이 지금 운영체제의 시초가 되었습니다. 왼쪽이 앨런 튜링이 개발한 튜링머신입니다. 폰 노이만은 A Stored-Program 즉, 메모리에 프로그램들을 저장하고 있는 컴퓨터를 만들었습니다. 1.4 그럼 프로그램은 또 뭐죠?프로그램이라는 무의식적으로 쓰곤 하는데 정의에 대해서 한 번 생각해볼 필요가 있습니다.
프로그램은 명령어의 집합으로, 하드웨어에게 어떤 행동을 하라고하는 명령입니다. 왼쪽은 C언어로 사람이 읽을 수 있는 코드입니다. 아주 작은 기능을 가지고 있는 프로그램입니다. 왜냐면? 여러가지 명령어로 이루어진 집합이기 때문입니다. 1.5 운영체제도 프로그램다시 본론으로 돌아오면, 운영체제 또한 여러가지 명령어의 집합으로 하나의 프로그램입니다.
"운영 체제는 프로세스, 리소스, 사용자 인터페이스 등을 관리하기 위해 응용 프로그램에 시스템 서비스를 제공하기 위해 컴퓨터에서 항상 실행되는 프로그램입니다" 쉽게쉽게
어떤 애플리케이션을 개발하기 위해서 개발자들은 여러가지 프로그래밍 언어를 사용해서 코딩을 합니다. 각자의 집에서 기능1, 기능2, 기능3 코딩을 하고 하나의 프로그램으로 합치려고 할 때 문제가 생깁니다..! 변수를 메모리에 저장하고, 프로그램을 실행하는 등 이런 태스크들은 공통적인 코드입니다. 각각의 개발자들이 이런 상황에 대한 코딩을 따로 한다면 비효율적일 수 밖에 없습니다. 더 나아가 하드웨어를 직접 컨트롤하는 것이기 때문에 매우 복잡할 수도 있습니다. 따라서 하나의 프로그램 즉, 운영체제라는 것을 만들어 하드웨어적인 부분과 애플리케이션을 컨트롤할 수 있게 했습니다. 즉, 운영체제는 하드웨어에 관한 지식이 없어도 쉽게 프로그램을 개발할 수 있도록 도와주는 하나의 커다란 소프트웨어라고 할 수 있을 거 같습니다.
1. ISA란? 2. Instruction이란? 각각의 Field는 다음과 같은 수의 bit를 사용한다. R format 그리고 I format의 경우는 뒤의 절반 16 bit를 Immediate라는 값으로 사용한다. 이 Immediate는 일종의 상수같은 개념인데, Operand를 모두 Register로부터 불러와서 사용하는 R format과는 달리, Instruction 내부에서 값 자체를 제공하는 것이다. 따라서 하나의 Operand를 레지스터로부터 받고, 16 bit의 Immediate 값과 연산을 수행하는 방식으로 동작한다. 각각의 Field는 다음과 같은 수의 bit를 사용한다. I format rd가 없어서 혼동이 될수도 있는데, 이항연산의 경우 rs와 imm의 값을 Operand로 사용하여 연산을 하고, 그 결과를 rd대신 rt에 저장하는 형태로 편법(?)을 사용한다. 그리고 또한 Immediate filed가 16 bit밖에 없는 점을 보아 4 Byte (32 bit) 의 Word를 사용하는 체계에서 상수의 값의 범위가 제한되어 버리지 않나하는 의문점도 생길 수 있다. lui $t0 0x1234 이렇게 하면 된다. 그러면 처음 lui Instruction을 수행했을 때 $t0 <= 0x1234_0000, 그리고 ori 연산을 할 때 $t0 Register에서는 0x1234_0000 이런식으로 연산이 진행된다. 두 번째 0x5678을 불러올 때 Sign extension이 아니라 Zero extension이 된다는 점에 유의하자. 그리고 마지막으로 J format은 Jump 관련 Instruction을 위해 사용되며, Field 구성은 매우 간단한 형태로 되어 있다. J format 3. Appendix add rd rs rt add rd rs rt andi/ori rt rs imm sll/srl/sra rd rt shamt sllv/srlv/srav rd rt rs lw rt imm(rs) sw rt imm(rs) lbu rt imm(rs) lui rt imm slt/sltu rd rs rt slti/sltiu rt rs imm 4. References |