운영체제
- 하드웨어와 소프트웨어를 관리하며, 사용자와 컴퓨터 간 상호작용을 가능하게 하는 시스템 소프트웨어
- 주요계층
- User Interface(UI)
- ex) 마우스, 키보드, GUI/CUI 등
- 사용자랑 운영체제랑 상호작용할 수 있도록 하는것
- System Call
- 응용프로그램이 운영체제의 서비스를 요청할 수 있도록 지원하는 표준화된 인터페이스
- Kernel
- 하드웨어쪽에 전달할때, 하드웨어 자원을 직접관리함
- 왜 사용?
- 하드웨어 자원을 직접 건드리는게 어려우니까 사용자와 하드웨어 간의 중재 역할을 수행하며 효율적인 안전한 컴퓨터 사용 환경 제공
- 개발자가 OS를 알아야하는 이유는?
- 어떤 프로그램을 만들든 무조건 OS 위에서 돌아감 → 문제발생 → 어떤 레벨에서 문제가 발생했는지 알아야함
- OS특징을 알고있으면, 그 특징에 기반해서 이런 기술이 나왔구나~ 이해할 수 있음
- ⇒ 내가 만든 개발 결과물에 대한 안정성은 높일 수 있음
- 주요 운영체제의 종류(둘의 차이만 알면될듯)
- 윈도우
- 사용자 친화적 GUI제공 ← 일반인들이 컴퓨터를 잘 쓰면좋겠다는 생각에 나온거라 → 그래서 무거움
- Linux
- 서버와 클라우드 환경에서도 많이씀, 무료로사용가능
- GUI 지원 약함 ← 가벼움
- 기업들이 많이 사용함 ← 가벼우니, 작은서버에서도 띄울수있다.
Linux
- CLI 기반의 OS
- 자유롭게 수정/배포 가능
- 주로 명령어를 통해 이루어짐
- 알아야하는 이유?
- 보통 배포용 서버의 OS로 리눅스가 많이 사용되기 때문
- crond? 시간 기반의 작업을 자동으로 실행하기 위한 데몬
- 동작 방식
- 하드웨어 자원을 커널이 관리하고, 셸을 통해 사용자가 명령을 입력하여 응용 프로그램이 실행
- 하드웨어 : 운영 체제가 작동하기 위한 물리적 자원을 제공, 커널을 통해 다른 계층과 상호작용함
- 커널 : 리눅스 운영체제의 핵심으로, 하드웨어와 사용자 공간 사이에서 중재 역할을 수행
- 셸 : 사용자와 커널 사이의 인터페이스 역할을 담당
- 응용프로그램 : 사용자가 사용하는 다양한 소프트웨어
User mode, Kernel mode
- user mode
- 브라우저 등 사용자 응용프로그램이 실행되는 환경
- 유저 영역 : UI + System call
- 동작예시 : 자바 프로그램, 브라우저, 터미널
- kernel mode
- 운영체제와 핵심 부분과 하드웨어가 동작하는 환경
- 커널영역 : Kernel, 커널모드일때는 유저영역 전부 접근 가능함
- 동작예시 : 하드웨어 제어, disk 관리, CPU 스케줄링, I/O, 네트네워크
- 이렇게 2개의 모드로 나눈 이유
- 서로의 역할을 명확히 구분함으로써 시스템 자원을 안전하게 관리하기위해
- 안정성 보장 : 유저모드에서 발생한 오류가 커널모드로 전파되지 않도록 격리
- 보안강화 : 시스템 자원은 커널에서만 접근
메모리 구조
- 프로그램 실행을 위해 운영체제가 할당하는 메모리 공간 체계
- 메모리(RAM) 구성 요소 - 외울필요없고, 이런게 있구나~정도
- Code : 프로그램 실행에 필요한 명령어들이 저장됨
- Data : 전역 변수 및 정적 변수(static)가 저장되는 영역
- Heap : 동적 메모리 할당이 이루어지는 공간 → 런타임시 크기가 결정됨
- Stack : 함수 호출시 생성되는 지역변수와 매개 변수가 저장되는 임시 메모리 영역
- 사용 이유?
- 프로그램이 안정적으로 실행되고 데이터를 체계적으로 저장, 관리, 처리할 수 있도록 하기 위함