ahwhew프로젝트를 진행하면서 힙 메모리 에러 등 여러가지 cs적인 트러블 슈팅이 있었는데요,, 이런 에러들이 있을 때 마다 cs지식의 중요성을 느낍니다..! 그래서 이번에는 운영체제에 대해 공부하고 그 내용을 정리해보도록 하겠습니다!
학교에서도 배우긴 했지만 여기에서는 실질적으로 필요한 지식들을 간략하게 써보고 다음에 학교에서 배운 지식들을 좀 더 깊게 다뤄보면서 직접 cpu를 설계했던걸 가져와서 한번 해보도록 하겠습니다 ㅎㅎ
1. 운영체제의 종류
운영체제는 앞단의 어떤 인터페이스를 두느냐에 따라 GUI와 CUI로 나눌 수 있습니다.
1) GUI(Graphical User Interface)
그래픽을 사용하여 컴퓨터와 상호작용하는 인터페이스입니다!
windowOS, macOS등 현대의 OS가 이를 대표합니다.
2) CUI(Character User Interface)
사용자가 키보드만을 사용하여 문자를 기반으로 컴퓨터와 상호작용하는 인터페이스입니다.
지금은 단종된 MS-DOS가 대표적입니다.
chatGPT도 CUI라 볼수 있습니다.
2. 운영체제의 역할
운영체제에서 중추적인 역할은 커널이 담당합니다! 그래서 커널이 하는 역할이 곧 운영체제의 역할이라 볼 수 있습니다!
- CPU 스케줄링과 프로세스 상태관리
- 메모리 관리
- 디스크파일 관리
- I/O 디바이스 관리
3. 운영체제의 구조
프로그램이 있으면 그 아래에 interface(GUI,CUI로 나뉨), system call, 커널( I/O 디바이스, 드라이버, 파일시스템등), 그리고 하드웨어가 있습니다.
커널의 드라이버를 기반으로 하드웨어와 통신을 합니다.
운영체제는 이 중에서 Interface, System Call, 커널로 이루어져 있습니다.
그래서 프로그램이 실행될 때의 과정을 살펴면 우선 프로그램이 ssd위에 올라가게 됩니다. 이 프로그렘이 RAM이라는 메모리에 올라가면 프로세서가 되죠! 그리고 메모리에 있는 intruction을 CPU에서 처리한다고 보면 됩니다.
4. 컴퓨터 시스템 구조
- CPU: 인터럽트에 의해 메모리에 존재하는 명령어를 해석해서 실행하는 일꾼
- DMA 컨트롤러: CPU의 일을 보조하는 일꾼
- 메모리: 전자회로에서 데이터, 상태 등을 기록하는 장치(작업장)
- 타이머: 특정 프로그램에 시간을 다는 역할
- 디바이스 컨트롤러: IO 디바이스들의 작은 CPU
- 로컬버퍼: 디바이스에 달려 있는 작은 메모리
이렇게 컴퓨터 시스템은 이루어져있는데요!
조금 더 설명을 덧붙여 보자면 메모리위에 process instruction들이 올라가 있고 CPU는 이 instruction을 처리해 주는 일꾼이라고 보면 됩니다. DMA는 cpu의 보조 일꾼역할을하고, 만약 무한루프에 빠지는 프로그램이 있으면 많은 자원을 차지하게 될 것이므로 이를 제한하는 역할을 하는게 타이머라고 보면 됩니다.
이 중에서 CPU에 대해서 조금 더 자세히 다뤄보도록 하겠습니다.
1) CPU
산술논리연산장치(ALU), 제어장치, 레지스터로 구성되어 있는 장치입니다.
인터럽트에 의해 메모리에 존재하는 명령어를 해석해서 실행하는 일꾼입니다!
- ALU(Arithmetic and logical unit)은 덧셈, 뺄셈, 나눗셈, 곱셈 등 산술연산과 논리연산을 하는 회로장치
- 제어장치는 프로세서의 조작을 지시하며 명령어들을 일고 해석하며 데이터 처리를 위한 순서를 결정
- 레지스터는 CPU안에 있는 매우 빠른 임시기억장치
그럼 어떤 계산을 CPU에선느 어떻게 처리할까요?
1. 메모리에 있는 일들을 레지스터에 올립니다.
2. ALU에게 레지스터의 값을 읽으라고 제어장치가 명령합니다.
3. ALU에서 계산이 이루어집니다
4. 레지스터에서 메모리로 계산된 값이 다시 올라갑니다.
이렇게 보면 CPU는 간단하게 메모리에서 레지스터로 올라간 값을 읽는 일꾼이라고 정리해 볼 수 있겠네용!
'운영체제' 카테고리의 다른 글
가상메모리와 스와핑, 페이지폴트 그리고 스레싱 (0) | 2024.02.08 |
---|---|
메모리 계층 (0) | 2024.02.08 |
시스템콜과 modebit (1) | 2024.02.08 |
인터럽트(Interrupt) (1) | 2024.02.08 |