운영체제는 학부생 시절 공부를 했지만(공룡책), 수업시간에 맨날 잤던 기억 + 벼락치기 기억 밖에 없어서
다시 전체적으로 공부해보려 인프런 강의를 수강했다.
제목은 '비전공자를 위한 운영체제' 인데, 비전공자 뿐만 아니라 개발자 분들, 실무자도 한 번 정리하는 느낌으로 들으면 좋을 것 같다.
그동안 어렴풋이 알고 있었던 전공 지식들을 쉽게 이해할 수 있어서 좋았다.
현재는 섹션 0만 들었는데, 총 10개의 섹션으로 구성되어 있고 강의 시간은 총 3시간 23분으로 가볍게 짬내서 들으면 좋을 것 같다.
까먹을까봐 적는 강의 내용
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/009.gif)
비전공자를 위한 운영체제
- 강의 목표 : 운영체제의 원리 이해
- 운영체제의 개념
- 프로그램, 프로세스, 쓰레드
- 동기화
- 메모리
비전공자를 위한 운영체제 - 인프런 | 강의
이 강의를 통해 모든 개발자들이 필수로 알아야하는 운영체제의 원리를 알 수 있습니다., 개발자의 필수 지식 운영체제를 배워서뿌리 깊은 나무가 되어 봐요 🌳 강의 주제 📖 [임베딩 영상] 주
www.inflearn.com
섹션 0. 운영체제 들어가기
01강. 운영체제 개요
- 운영체제가 하는 일
- 프로세스 관리
- 여러 프로세스들이 동시에 실행됨(ex. 롤, 크롬, 지니 동시에 실행)
- 메모리 관리
- 모든 프로그램은 메모리에 올라와서 실행됨.
- 여러 프로그램을 메모리에서 동시에 실행하기 위하여 운영체제가 관리.
- 하드웨어 관리
- 사용자가 하드웨어에 직접 저장하지 못하도록 막음
- 운영체제가 판단하여 HDD의 적절한 위치에 저장
- 사용자의 악의적인 공격, 하드디스크의 특정 영역에 다른 중요데이터가 있을 수 있음.
- 파일 시스템 관리
- 프로세스 관리
02강. 운영체제의 역사
- 1940년도 : 애니악(1943년 ~)
- 세계에서 가장 큰 전자 계산기
- 종이에 프로그래밍 후 스위치, 배선 연결
- 30톤 : 진공관 + 논리회로
- 결과 출력은 펀치카드, 매우 느렸음
- HW 비용이 비쌌으므로 어떻게하면 CPU를 많이 사용할 수 있을까 고민
- 1950년대 초반
- 직접회로(IC) : 진공관 + 전선 = 논리회로 아주 작은 크기로 만듦.
- CPU, 메모리는 있지만 키보드, 모니터는 없었음.
- 입력 : 펀치카드 → 결과 출력 : 라인 프린터
- 1950년대 중후반
- 기존
- 프로그래머 펀치카드로 프로그래밍 → 오퍼레이터가 컴퓨터(CPU)에 직접 카드를 넣음 → 결과를 다시 프로그래머에게 전달
- 오퍼레이터의 오버헤드가 너무 컸음
- 컴퓨터의 처리 속도보다 프로그래머 → 오퍼레이터 시간이 더 오래 걸렸음.
- 변경 : 싱글스트림 배치 시스템
- 프로그래머 펀치카드로 프로그래밍 여러개 → 오퍼레이터가 컴퓨터(CPU)에 직접 카드를 넣음 → CPU에서 순서대로 결과 처리 → 결과 프로그래머에게 한 번에 전달
- CPU 사용성을 더 높이기 위해서 고민을 함. → 입출력 관리자를 만듦(입출력 도중에도 CPU가 연산을 처리할 수 있도록)
- 입력의 경우에는 CPU 가 입력이 완료될 때까지 기다려야 하는 경우가 있어 사용률이 떨어짐
- 출력은 입출력 관리자(IO Device Controller)를 통해 바로 출력 가능
- 기존
- 1960년대
- 시분할 시스템 : 싱글스트림 배치 시스템 한계 극복
- 메모리에 여러 프로그램을 올려 놓고 시간을 분할하여 빠르게 돌아가면서 실행 → 동시에 여러 프로세스가 실행되는 것 처럼 보임
- 동시에 여러 사용자가 사용할 수 있음(단말기 : 터미널) : 왜냐하면 컴퓨터가 비쌌기 때문에
- 여러 사용자가 한 컴퓨터에 개인 정보를 저장 → 이 때문에 파일시스템 등장
- UNIX : 멀티 프로그래밍, 다중 사용자, 파일 시스템을 구현한 운영체제
- 문제점
- 메모리 침범 이슈
- 메모리 주소 이슈 : 기존 싱글스트림 배치 시스템에서는 한 메모리에 하나의 프로세스가 실행되었음. 이제는 어느 메모리에서 실행되는 지 모름 → ‘베이스 레지스터'를 추가하여 프로그램의 시작주소 저장 → 모든 프로그램은 0번지에서 실행된다고 가정
- 시분할 시스템 : 싱글스트림 배치 시스템 한계 극복
- 1970년도 이후
- 개인용 컴퓨터의 시대 : 컴퓨터의 가격이 싸짐
- 매킨토시 : GUI 도입으로 인기를 얻음
- MS-DOS
- 개인용 컴퓨터의 시대 : 컴퓨터의 가격이 싸짐
- 결론 : CPU 사용률, 비용절감을 위한 노력 → 오늘 날의 운영체제 탄생
03강. 운영체제의 구조
- 커널(kernel) : 프로세스, 메모리, 저장장치 관리
- 인터페이스 : 사용자는 커널에 직접접속 불가, 인터페이스를 통해서 접속 가능
- 인터페이스 : GUI, CLI
- GUI(Graphic User Interface) : 그래픽으로 된 인터페이스, MacOS, Winodws
- CLI(Command-Line Interface) : 텍스트를 이용해 커널과 상호작용, Unix, Linux
- 인터페이스 : GUI, CLI
- 시스템콜 : 어플리케이션은 ‘시스템 콜’을 통해서 커널에 접근 가능
- 프로세스 제어, 파일 조작, 장치 조작, 정보 유지보수, 통신과 보호
- User Mode와 Kernel Mode로 나뉨open() 시스템 콜을 호출한 사용자 응용의 처리
open() 시스템 콜을 호출한 사용자 응용의 처리 - 커널에서 제공하는 Write 함수를 이용
- 권한수준 사용자 공간(user space, x86 링3, ARM 사용자 모드(User Mode))에서 실행. 응용 프로그램에서의 리눅스 커널의 장치 드라이버 호출
char gbuff[100]; int main(int argc, char*argv[]) { int leng; int fp; fp = open("/dev/mydrv", ....);// mydrv_open 호출 gbuff[0] = 10; gbuff[1] = 20; leng = 2; write(fp, (void*) gbuff, leng);// mydrv_write호출 close(fp);// mydrv_release호출return 0; }
- 드라이버 : 하드웨어와 커널의 인터페이스
- 커널이 여러 HW에 맞는 프로그램을 제공하기는 힘듬
- 드라이버를 제조사에서 제작하는 것이 일반적
- 키보드, 마우스는 커널에 포함되어 있음
- 그래픽카드, 타블렛 등 복잡한 장치들은 디바이스 드라이버를 설치해서 사용해야 함
04강. 컴퓨터 하드웨어와 구조
- 폰 노이만 구조 : 프로그램 내장 방식
- 예전에는 애니악과 같이 하드웨어로 프로그램을 만들어서 사용하였기 때문에, 프로그램이 달라질 때마다 매번 스위치와 배선을 다시 조정
- 버스 : 데이터를 전달하는 통로
- CPU ↔ MEM(RAM)
- 컴퓨터 하드웨어
- 메인보드 : 다른 하드웨어를 연결하는 장치
- 장치 간에 데이터를 전송하는 건 메인보드의 버스가 담당
- 구성
- CPU
- MEM
- HDD
- Grapic Card
- 출력단자 - Monitor
- USB 단자 - 마우스, 키보드
- 사운드 단자 - 스피커
- 메인보드 : 다른 하드웨어를 연결하는 장치
- CPU 구조
- CPU(Central Processing Unit) : 중앙 처리 장치
CPU 구조
- 장치
- 산술논리 연산장치(Arithmetic and Logic Unit, ALU) : 데이터 연산 담당
- 제어 장치(Control Unit) : 모든 장치들의 동작을 지시하고 제어
- 레지스터 : CPU 내에 계산을 위해 임시로 보관(변수)
- 프로그램 카운터
- 메모리 주소 레지스터
- 메모리 버퍼 레지스터
- 명령어 레지스터
- 메모리 종류
메모리 종류 - RAM(Random Access Memory)
- 랜덤으로 데이터를 읽어도 저장된 위치와 상관 없이 읽는 속도가 같음.
- 전력이 끊기면 데이터를 잃어버림, 메인메모리로 사용
- ROM(Read Only Memory)
- 전력이 끊겨도 데이터를 계속 보관
- 데이터를 한 번 쓰면 수정이 불가능
- 부팅과 관련된 BIOS를 저장하는데 주로 쓰임
- RAM(Random Access Memory)
05강. 컴퓨터의 부팅과정
- 전원
- ROM에 저장된 BIOS 실행
- BIOS : 전원, CPU, MEM, 키보드, 마우스, 하드디스크 등 주요 하드웨어에 이상이 없는지 확인 → 이상이 있다면 오류음과 함께 부팅 불가
- 이상이 없다면 하드디스크에 있는 마스터 부트 레코드에 저장된 부트로더를 메모리로 가져와서 실행(ex. Windows Boot Manager)
- 운영체제 - Windows / Linux 실행
- 모든 응용프로그램은 메모리에 올라와서 운영체제가 관리
06강. 인터럽트
- CPU → 입출력 관리자(주기적으로 체크) : 폴링(Polling) 방식 / 지속적으로 확인해야하므로 성능이 좋지 않음.
- 인터럽트 : 폴링 방식의 단점을 해결한 방식, 비동기적으로 동작
- CPU는 입출력 관리자에게 명령을 내리고, 다른 작업을 계속함
- 입출력 관리자는 입출력이 완료되었을 때 CPU에게 알려줌
- CPU는 인터럽트 서비스 루틴(ISR) 실행인터럽트 서비스 루틴 - 특정 인터럽트가 들어오면, 그 인터럽트를 실행해 줌
-
인터럽트 서비스 루틴
- 종류
하드웨어 인터럽트와 소프트웨어 인터럽트 - 하드웨어 인터럽트 : ex. 입출력
- 기계검사 인터럽트 - 프로그램을 실행하는 도중 갑작스런 정전이나 컴퓨터 자체 내에서
- 외부 인터럽트 - 오퍼레이터나 타이머에 의해 의도적으로 프로그램이 중단된 경우
- 입출력 인터럽트 - 입출력의 종료나 입출력의 오류에 의해 CPU의 기능이 요청되는 경우
- 프로그램검사 인터럽트 - 프로그램 실행 중 보호된 기억공간 내에 접근하거나 불법적인
- 소프트웨어 인터럽트(SWI, Software Interrupt) : 사용자 프로그램에서 발생한 인터럽트,이를 트랩(trap) 또는 **예외(exception)**라 부릅니다.
- 유효하지 않은 메모리에 접근
- 0으로 나누는 명령어 등
- 프로그램 실행 중 프로그램 상의 처리 불가능한 오류나 이벤트를 알리기 위한 경우 발생하는데, 이를 트랩(trap) 또는 예외(exception)라 부릅니다.
- 유효하지 않은 메모리에 접근
- 0으로 나누는 명령어 등
- 우선순위
- 여러 장치에서 인터럽트가 동시에 발생하거나 인터럽트 서비스 루틴 수행 중 인터럽트가 발생한 경우 우선순위 판별 필요
- 전원 이상(Power fail)
- 기계 착오(Machine Check)
- 외부 신호(External)
- 입출력(I/O)
- 명령어 잘못
- 프로그램 검사(Program Check)
- SVC(SuperVisor Call)
- 일반적으로 하드웨어 인터럽트가 소프트웨어 인터럽트보다 우선 순위가 높고,
- 일반적으로 높고 내부 인터럽트 보다 외부 인터럽트가 우선 순위가 높다.
- 여러 장치에서 인터럽트가 동시에 발생하거나 인터럽트 서비스 루틴 수행 중 인터럽트가 발생한 경우 우선순위 판별 필요
- 참고
- PCB(Process Control Block) : 커널의 데이터 영역에 존재하며 각각의 프로세스마다 고유의 PCB가 있다.인터럽트 발생 시 프로세스의 어느 부분이 수행중이었는지를 저장한다.(수행중이던 memory 주소, 레지스터값, 하드웨어 상태 ...)
'IT > OS' 카테고리의 다른 글
[OS] 좀비 프로세스(Zombie Process)란? 부모프로세스와 자식프로세스 (0) | 2022.01.15 |
---|---|
[OS] 멀티프로그래밍과 멀티프로세싱(Feat. PCB, Context Switching) (0) | 2022.01.15 |
[OS] 프로그램과 프로세스의 차이, 컴파일(Compile), CPU 구성요소 (2) | 2022.01.12 |
[OS] AMD64란? x86/x64 차이, IA-32(VirtualBox only runs on the amd64 architecture) (0) | 2022.01.11 |
[Windows] Windows Server 2019 인프런 강의 수강 후기, Virtual Box 설치 (0) | 2022.01.10 |
댓글