운영체제가 없다면, 응용 프로그램이 실행될 수 없다. 운영체제는 실행되는 응용 프로그램들이 메모리와 CPU, 입출력 장치 드의 자원들을 사용할 수 있도록 만들어 주는 역할을 한다.
모든 응용 프로그램이 시스템의 자원을 마음대로 사용한다면, 해커에 의한 공격에 무방비한 상태가 된다. 악의적인 목적을 가진 프로그램이 디스크의 모든 민감한 정보에 접근한거나, 내 스마트폰의 특정 앱이 카메라를 아무 대나 실행해서 촬영할 수 있게 된다. 이를 막기 위해, 응용 프로그램은 권한에 대한 관리가 필요하다. 또한 여러 사람이 하나의 기기를 사용하는 경우에는 사용자를 관리하는 일도 매우 중요하다. 운영체제는 응용 프로그램이 실행될 때, 시스템 자원을 사용할 수 있도록 권한과 사용자를 관리한다.
응용 프로그램이 운영체제를 통해 컴퓨터에게 일을 시키기위해선 컴퓨터를 조작할 수 있는 권한을 운영체제로 부터 부여 받아야한다. 권한 없이는 운영체제가 재공하는 기능을 사용할 수 없다. 응용 프로그램이 운영체제와 소통하기 위해서는, 운영체제가 응용 프로그램을 이해 인터페이스 (API)를 제공해야 한다. 응용 프로그램이 시스템 자원을 사용할 수 있도록, 운영체제 차원에서 다양한 함수를 제공하는 것을 시스템 콜(system call)이라 한다.
스마트폰에서 사용자에게 어떤 디바이스(카메라등)의 사용을 허락받는 화면을 보적이 있다. 이는 응용프로그램이 운영체제로부터 컴퓨터조작 권한을 요청하는 것이다. 워드프로세서 프로그램이 프린터를 사용해서 인쇄하기 위해서는, 워드프로레서 프로그램은 운영체제로부터 프린터 사용에 대한 권한을 부여받아야 한다.
응용 프로그램이 프린터 사용에 대한 권한을 획득한 후에는, 프린터를 사용할 때 필요한 API를 호출해야 한다. 이 API는 시스템 콜로 이루어저 있다.
운영체제에서는 연속적으로 실행되고 있는 애플리케이션을 말한다.작업(task)이라는 용어와 같은 의미로 쓰이기도한다.
멀티프로세싱
: 여러개의 프로세서를 사용하는 것을 말한다.
멀티테스킹
: 동일한 시간에 여러 개의 프로그램을 뛰우는 시분할 방식을 말한다.
프로레스의 관리는 운영체제의 중요한 부분 중 하나다.
스레드는 사적적 의미로 한 가닥의 실이라는 뜻으로, 어떤 프로그램 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 갖고있다. 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 도 있는데 이런 방식을 멀티스레드 라고한다.
일반적으로 하나의 프로세스는 하나의 스레드를 가지고 작업을 수행한다.
멀티 스레드란 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 의미
하고,멀티 프로세스는 여러 개의 CPU를 사용하여 여러 프로세스를 동시에 수행하는 것을 의미
한다.
운영체제는 멀티 태스킹을 할 수 있도록, 프로세스마다 CPU 및 메모리 자원을 적적히 할당하고 병렬로 실행한다. 예를 들어 워드로 문서작업을 하면서, 동시에 크롬 브라우저에서 음악을 들을 수 있다. 물론 멀티 태스킹은 꼭 멀티 프로세스를 의미하는 것은 아니다. 하나의 프로세스 내에서 멀티 태스킹을 할 수 있도록 만들어진 애플리케이션도 있다. 멀티스레드를 통해 하나의 프로세스가 두가지 이상의 작업을 처리할 수 있다.
멀티 프로세스가 애플리케이션 단위의 멀티 태스킹이면, 멀티 스레드는 애플리케이션 내부에서의 멀티 태스킹이라고 할 수 있다.
멀티 스레드는 다양한곳에서 사용된다. 대용량 데이터의 처리시간을 줄이기 위해 데이터를 분할하여 병렬로 처리하는 데에 사용할 수도 있고, UI를 가지고 있는 애플리케이션에서 네트워크 통신을 하기 위해 사용할 수도 있다. 그리고 여러 클라이언트의 요청을 처리하는 서버를 개발할 때에도 사용된다.Concurrency(동시성, 병행성)
:여러 개의 스레드가 시분할 방식으로 동시에 수행되는 것처럼 착각을 불러 일으킨다.
Parallelism(병렬성)
:멀티 코어 환경에서 여러 개의 스레드가 실제로 동시에 수행된다.
가비지 컬렉션은 프로그램에서 더이상 사용하지 않는 메모리를 자동으로 정리(관리)하는 것이다. 이런 기능을 가진 언어는 자바, C#, 자바스크립트 등이 있다.
한 객체에 flag를 두고, 가비지 컬렉션 사이클마다 flag에 표시 후 삭제하는 mark and sweep 방법이다. 객체에 in-use flag를 두고, 사이클마다 메모리 관리자가 모든 객체를 추적해서 사용 중인지 아닌지를 표시(mark)한다. 그 후 표시되지 않은 객체를 삭제(sweep)하는 단계를 통해 메모리를 해체한다.
한 객체를 참조하는 변수의 수를 추적하는 방법이다.
객체를 참조하는 변수는 처음에는 특정 메모리에 대해 레퍼런스가 하나뿐이지만, 변수의 레퍼런스가 복사될 때마다 레퍼런스 카운트가 늘어난다. 객체를 참조하고 있던 변수의 값이 바뀌거나, 변수 스코프를 벗어나면 레퍼런스 카운트는 줄어든다. 레퍼런스 카운트가 0이 되면, 그 객체외 관련한 메모리를 비울 수 있다. 레퍼런스 카운트가 0이 된다는 것은 아무도 그 객체를 참조하고 있지 않다는 말이다.