본문 바로가기
CS/BOOK

[한 권으로 읽는 컴퓨터 구조와 프로그래밍] 10. 웹 브라우저를 활용한 프로그래밍

by 벨롭 2024. 4. 23.

 

웹 브라우저를 활용한 프로그래밍을 살펴보기에 앞서서, 웹 브라우저를 활용하지 않고 프로그래밍을 하게 되면 어떤 과정을 거쳐야하는지를 살펴볼 것이다.

 

 

 

 

 

시스템 프로그램의 빌드 과정

 

 

보통 시스템 프로그램은 운영 체제에 딸려오는 가벼운 유틸리티나 프로그램 개발에 도움이 되는 컴파일러등을 가리킨다. 이런 프로그램을 개발할 때는 시스템의 기능을 최대한 활용해야하기 때문에 고수준의 언어 중에서도 좀 더 기계에 가까운 C나 C++등의 언어를 사용한다.

 

C언어에서 개발 과정 중에서 직접 메모리를 할당하는 malloc이라는 함수를 사용할 만큼 기계에 가깝다. 또한 메모리의 주소값을 저장하기 위해 포인터라는 개념또한 빈번하게 등장한다.

 

 

 

 

 

컴파일러 언어인 C로 개발된 프로그램은 기계어로 번역하는 프로그램 빌드를 거쳐야하는데, 터미널 애플리케이션을 열면 실행되는 명령 프롬프트에서 해당 명령을 내릴 수 있다.

 

 

그런데 터미널은 I/O 장치이기때문에, 프로그램이 직접 터미널과 통신하는 대신 운영체제가 중간에서 통신을 중재한다. 운영체제가 한 번에 프로그램을 하나 이상 실행할 수 있기 때문에 생각보다 이 과정이 복잡하다.

 

우선, 운영체제에게 부탁하기 위해서는 시스템 콜을 발생시켜야한다. 시스템 콜이 이루어지면 OS는 사용자 프로그램을 슬립 시키고 일을 처리한다. 그리고 일이 끝나면 다시 프로그램을 깨워서 작동되도록 한다.

 

 

 

 

프로그램이 슬립상태에서 깨어났을 때 프로그램을 정상적으로 작동시키기 위한 정보(문맥)들이 날아가있다면 곤란할 것이다. 예를 들어, 가상 주소를 물리 주소를 변환해주는 MMU 등이 복구되지 않으면 정상적으로 프로그램이 명령어를 실행시킬 수가 없다. 따라서 프로세스가 바뀔때마다 프로세스와 관련된 정보인 문맥전환도 함께 이루어져야 한다.

 

터미널에서 키가 하나 눌릴때마다 문맥전환이 발생하면 비효율적이므로 장치 드라이버는 터미널에서 들어오는 문자를 선입선출 구조인 입력버퍼에 저장하고, 사용자가 빌드명령을 다 작성한 후 엔터를 누르면 그때서야 문맥 전환이 발생한다.

 

이 버퍼는 용량이 가득 차게 되면 오버플로우가 발생하여 시스템에 오류를 발생시키기도 한다. 즉, 버퍼에 대해서도 적절한 관리가 필요하다.

 

 

 

 

 

 

애플리케이션 프로그래밍

 

 

애플리케이션이 운영체제를 다루는 과정은 위처럼 매우 복잡하기 때문에,  웹 브라우저와 같은 사용자 프로그램이 제공하는 고차원의 명령어를 통해서도 프로그램을 만들 수 있다.

 

 

 

 

웹브라우저를 다루기 위한 언어에는 HTML, CSS, JavaScript가 있는데, 이들을 활용하면 메모리 관리, 버퍼 관리 등의 세부사항을 신경쓰지 않고 프로그램을 만들 수 있다.

 

하지만 단점도 있다. 예를 들어 장치 입출력 방식의 코드를 파일 입출력 방식의 코드로 변환하려고 해보자. 운영체제는 파일과 장치 입출력을 동일한 과정으로 처리하지만, 웹브라우저를 통해 실행시키려면 전혀 다른 코드를 작성해야 한다. 또는 아주 복잡한 애플리케이션의 환경에서 버그가 발생할 수도 있다. 

 

따라서 목적에 따라 적절한 판단이 필요하다.

 

 

 

 

 

-- 확인 문제 --

다음은 시스템 프로그램의 빌드과정이다. 빈칸에 알맞은 말을 써 넣으시오.

 

C언어로 만들어진 프로그램을 실행하기 위해서는 우선 기계어로 번역하는 (A)과정을 거쳐야 한다.
(A)를 위한 명령을 내리기 위해서는 터미널을 이용할 수 있는데, 터미널은 I/O 장치이므로 프로그램이 직접 접근할 수 없고 운영 체제를 통해야하므로 운영체제에 (B)를 보낸다. 이후 컴파일이 완료되면, 원래 프로그램으로 돌아가기 위한 정보를 복구하는 (C)가 일어난다.

 

 

-- 정답 --

더보기

(A) 컴파일

(B) 시스템 콜

(C) 문맥 전환