CS/운영체제

[운영체제] 운영체제를 공부해야하는 이유

mabb 2023. 7. 15. 09:56
반응형

도대체 java코드는 어떻게 cpu까지 도달할까? 라는 궁금증이 있었다. 기본기가 아직 부족한 것에 따른 우문인 것 같다.

이에 대해 운영체제 공부 중 문뜩 이해한 부분을 메모한다. 컴퓨터를 왜 쓰는가? '필요한 특정 프로그램'을 사용하기 위해 컴퓨터를 사용한다. 애니악 같은 초기의 컴퓨터는 미사일의 탄도 계산 같은 하나의 프로그램을 수행하였다. 현대의 일반 사용자들은 게임을 하거나 문서작업을 하거나 웹서핑을 목적으로 컴퓨터를 사용하곤 한다. 보통 컴퓨터를 켜면 문서작업 하나만 하지 않고 웹서핑을 하면서 음악을 들으며 문서작업을 하는 등 여러 프로그램을 이용하며 멀티 태스킹을 하게 된다. 프로그램과 데이터를 입력으로 넣으면(천공카드) 일괄적으로 배치처리를 하고 결과물을 출력하던(라인프린터) 초기의 컴퓨터 대비 엄청나게 고도화된 것이다.
폰 노이만 구조 및 시분할 방식 등의 기술적 발전을 토대로 멀티태스킹이 가능한 현대의 컴퓨터가 되었다.  '필요한 특정 프로그램'들을 동시 다발적으로 자유자재로 쓸 수 있게 된 것이다.

한편, 컴퓨터의 CPU나 메모리, 저장장치, 입출력장치 등의 자원은 한정되어 있다. 실행되고 있는 복수의 프로그램들 입장에서는 그 각각 모두들 컴퓨터 자원이 필요하다. 어떻게 각각의 프로그램들이 한정된 컴퓨터의 자원을 사이좋게 나눠 쓸 수 있는 것일까? 각각의 프로그램들이 컴퓨터의 한정된 자원들에 제각각 접근하여 마음대로 사용한다면 난리가 날 것이다.

이러한 교통정리를 해주는 것이 운영체제(Operating System)이다. 컴퓨터라는 기계의 동작 및 자원을 관리해주는 '소프트웨어'가 바로 운영체제인 것이다.

여기서 응용프로그램에 대해 정의해보는 것이 필요하다. 미사일 탄도계산이든 게임이든 문서작업이든 사용자들이 필요로 하는 특정 기능을 수행하는 소프트웨어를 응용프로그램(Application) 이라고 한다.  

컴퓨터를 왜 쓰는가?보통은 응용프로그램을 사용하기 위해서 사용한다. 현대의 컴퓨터는 여러개의 응용프로그램을 동시 다발적으로 사용할 수 있을 정도로 고도화 되었다. 한정된 자원 위에서 수많은 응용프로그램들이 제대로 동작하기 위해서는 그 중간에 운영체제가 필수적으로 필요한 것이다.  모든 응용프로그램은  운영체제 위에서 동작한다.
모든 컴퓨터의 자원은 운영체제가 관리하고 모든 응용프로그램은 운영체제를 통해서만 컴퓨터의 자원에 접근해야 한다.

컴퓨터라는 자원을 운영하는 시스템이 있기 때문에 필요한 수많은 응용프로그램들을 사용자가 편리하게 사용할 수 있다. 운영체제는 사용자 편의를 위하여 UI(User Inrerface)를 제공한다.
UI의밑에는 운영체제의 핵심 기능을 수행하는 커널(Kernel)이 있다. 커널은 핵심이라는 의미이다. 커널은 컴퓨터의 자원 관리, IO관리,네트워크 관리, 프로세스 및 CPU관리 등 매우 핵심적인 기능을 수행한다.

모든 응용프로그램은 커널을 통해 실행된다고 이해해볼 수 있다. 커널은 응용프로그램들이 커널을 이용할 수 있는 수단을 제공하는데 함수 형태의 시스템콜(System call)이 바로 그것이다. 시스템콜은 운영체제의 핵심기능에 대한 인터페이스라고 볼 수 있다. 응용프로그램이 자기 자신에 대한 이용법으로 API(Application Programm Interface)를 제공하는 것처럼 커널은 사용자나 응용프로그램이 운영체제의 서비스를 이용할 수 있도록 이용법으로 시스템콜을 제공하는 것이다. 사용자와 응용프로그램은 시스템콜이라는 인터페이스 수단을 통하지 않고 커널에 접근할 수 없다. 즉 시스템 콜을 통하지 않고는 컴퓨터자원에 접근할 수 없다. 시스템콜이라는 유일한 수단을 통해서만 컴퓨터자원에 접근할 수 있으니 철저하게 운영체제의 관리하에 동작하게 되는 것이다.

여기서 jvm도 운영체제 입장에서는 응용프로그램이라고 이해해보았다. 톰캣도 nginx도 그리고 jvm도 다 운영체제 위에서 동작하는 응용프로그램들이다. 웹 애플리케이션, 스마트폰 앱 등 모두가 응용프로그램이고 운영체제의 관리하에 동작한다.소프트웨어를 운영체제와 응용프로그램으로 구분한다면 나는 사람들에게 필요한 특정 기능을 제공하기 위한 응용프로그램(애플리케이션)을 개발하는 것이고 그 중 웹을 이용한 웹애플리케이션을 만드는 것이다.

java로 만든 코드는 결국  운영체제위에서 동작하는 jvm이라는 응용프로그램에서 실행된다. 응용프로그램은 커널을 통해 실행되고 그러기 위해서는 시스템콜 함수와 매칭이 되어야 한다. 시스템콜은 운영체제의 인터페이스이므로 내가 만든 응용프로그램이 운영체제위에서 실행되길 바란다면 해당 운영체제의 시스템콜을 따라야만 하는 것이다.

현대의 컴퓨터에서 응용프로그램은 운영체제위에서 동작할 수밖에 없기때문에  응용프로그램을 개발하기 위해서는 필수적으로 운영체제를 공부해야 하는 것이다.

반응형