Operating System
(window OS, Mac OS, UNIX)
시스템자원 관리, 사용자와 컴퓨터간의 커뮤니케이션 지원, 응용 프로그램 제어
시스템 자원이란 컴퓨터 하드웨어를 뜻함
(디스플레이, 메인보드, CPU, 램, 전원 공급 장치, 하드 디스크, 키보드,마우스, 저장매체(SSD 등) )
User Program(Applications)
(한글, 액셀, 워드, 롤, 오버워치, 카카오톡,....)
가 있다고 치면 그들에 대한
Process Management(프로세스 관리)
Main Memory Management(주기억장치 관리)
File Management (파일 관리)
Disk Management(디스크 관리)
I/O Management(입출력 관리)
Networking Protention(네트워킹, 보호/보안)
운영체제가 도서관이라고 한다면, 응용 프로그램을 시민, 컴퓨터 하드웨어는 책이라고 볼수있다.
응용 프로그램은 하드웨어를 사용함으로써 운영체제를 이용한다.
(시민은 도서관에 원하는 책을 요청하고
도서관은 그에 맞는 책을 찾아서 시민이 이용할수있게 한다.
시민은 기한이 다 되면, 도서관이 해당 책을 회수한다.)
=
(운영체제는 응용 프로그램이 요청하는 메모리를 허가하고, 분배한다.
운영체제는 응용 프로그램이 요청하는 CPU 시간을 제공한다.
운영체제는 응용 프로그램이 요청하는 IO Devices 사용을 허가/제어한다)
쉘(shell)
사용자가 운영체제 기능과 서비스를 조작할 수 있도록 인터페이스를 제공하는 프로그램이다.
쉘은 터미널환경(CLI) 키보드와 검은화면, GUI환경 마우스이용가능 두 종류로 분류된다.
API (Application Programming Interface)
함수로제공
보통은 라이브러리 형태로 제공
시스템콜
시스템 콜 또는 시스템 호출 인터페이스
운영체제가 운영체제 각 기능을 사용할수 있게 시스템 콜이라는 명령 또는 함수를 제공한다.
API 내부에는 시스템콜을 호출하는 형태로 만들어지는 경우가 대부분이다.
만약 운영체제를 만든다면
운영체제를 개발(kernel) -> 시스템 콜을 개발 -> C API 개발 -> Shell 프로그램 개발 -> 응용프로그램 개발
순서가 될것이다.
이 시스템콜 정의의 예가
윈도우 API 이다.
API : 각 언어별 운영체제 기능 호출 인터페이스 함수 시스템콜 : 운영체제 기능을 호출하는 함수.
멀티 태스킹은 단일 CPU (task를 OS의 스케쥴링에 의해 task를 번갈아가며 수행하는데, 여러 task를 자주 번갈아가며 수행하여 사용자 입장에선 동시에 여러 task가 수행되고 있다고 느낌)
멀티 프로세싱은 여러 CPU에 하나의 프로그램을 병렬로 실행해서 실행속도를 극대화시키는 시스템
최대한 CPU를 많이 활용할수 있게 하는 시스템
시간대비 CPU 활용도를 높이고자하며, 응용 프로그램을 짧은 시간 안에 실행 완료 시킬수 있다.
응용 프로그램은 온전히 CPU를 쓰기보다는 다른 작업 중간에 필요로 하는 경우가 많다.
응용 프로그램이 실행 되다가 파일을 읽는다던가, 프린팅을 한다던가.
멀티 프로그래밍, 멀티 태스킹은 유사한 의미로 통용 된다.
핵심은 여러 응용 프로그램을 실행을 가능하게하며
응용 프로그램이 동시에 실행되는 것처럼 보이게 하며
CPU를 쉬지 않고 응용 프로그램을 실행토록 해서, 짧은 시간 안에 응용 프로그램이 실행 완료 될수 있게한다.
컴퓨터 응답 시간도 짧게해서, 다중 사용자도 지원한다.
실행 중인 프로그램을 프로세스 라고한다.
다시 말해 메모리에 올려져서 실행 중인 프로그램이다.
근데 응용프로그램과 프로세스는 다르다.
응용 프로그램은 여러 개의 프로세스로 이루어 질수 있다.
하나의 응용 프로그램은 여러 개의 프로세스(프로그램)가 상호작용을 하면서 실행 될 수도 있다.
위키
프로세스는 컴퓨터에서 연속적으로 실행되고 있는 컴푸터 프로그램을 말한다.
종종 스케쥴링의 대상이 되는 작업(task)라는 용어와 거의 같은 의미로 쓰인다.
여러 개의 프로세서를 사용하는 것을 멀티프로세싱이라고 하며 같은 시간에 여러 개의 프로그램을 띄우는 시분할 방식을 멀티태스킹이라고한다.
프로그램은 보조기억장치(하드디스크,SSD)에 존재하며, 실행되기를 기다리는 명령어(코드)와 정적인 데이터의 묶음이다.
이 프로그램의 명령어와 정적 데이터가 메모리에 적재되면 생명이 있는 프로세스가 된다.
즉 프로세스란 실행 중인 프로그램을 의미한다.
프로세스는 다른 프로세스의 공간을 접근할 수 없다.
IPC(interprocess communication)을 통해 프로세스간 커뮤니케이션을 해야한다. 성능을 높이기위해 여러 프로세스를 만들어서 동시 실행하고 이 때 프로세스간 상태 확인 및 데이터 송수신이 필요하다.
프로세스 간에는 각 프로세스의 데이터 접근이 불가능하다.
스레드(Thread)
하나의 프로세스에 여러개의 스레드를 생성 가능하다.
스레드들은 동시에 실행 가능하다.
프로세스 안에 있으므로, 프로세스의 데이터를 모두 접근 가능하다.
프로세스는 독립정, 스레드는 프로세스의 서브셋
프로세스는 각각 독립적인 자원을가지지만 스레드는 프로세스 자원을 공유
프로세스는 자신만의 주소영역을 가지지만 스레드는 주소영역을 공유
프로세스간에는 IPC기법으로 통신해야하지만 스레드는 그럴 필요가 없음.
Thread
프로세스와 달리 스레드간 자원공유
CPU 활용도를 높이고, 성능 개선 가능, 응답성 향상, 자원공유효율
but
하나의 스레드 문제가 프로세스 전반에 영향을 미치고 여러 스레드 생성시 성능 저하가능
무한 대기 상태:
두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에, 다음 단계로 진행하지 못하는 상태.
교착 상태 발생 조건
다음 네가지를 모두 성립할 때, 교착상태 발생 가능성이 있다.
상호배제: 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권을 요구
점유대기: 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다.
비선점 : 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뻇을 수 없다.
순환대기 : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.