All Articles

1.3 프로그램과 프로세스

이 글은 Codeflow라는 사이트의 강의를 듣고 개인적으로 정리한 내용을 담고 있습니다.
아직 초보적인 단계라 부족하거나 잘못된 부분이 있을 수 있습니다.
혹시 잘못되거나 첨언할 내용이 있다면 댓글 남겨주시면 감사하겠습니다.


먼저 운영체제란?

부팅시 실행되는 하나의 프로그램,

컴퓨터에 전원이 들어가면 CPU는 ROM 안에 있는 프로그램을 통해서 보조기억장치(HDD, SSD, USB)에 저장되어 있는 운영체제를 시동하는 프로그램(Boot Loader)를 실행시킨다.

역할

  • 주변 기기들을 상호 연결하고 제어

  • 응용 프로그램이 사용할 수 있는 서비스, 라이브러리 제공

    • 보조기억 장치를 추상화한 파일시스템 API 제공
    • 주변기기를 추상화한 API 제공
    • 네트워크를 추상화한 API 제공
    • 공통적인 GUI를 만들 수 있도록 API 제공

    => 이런 요소들 때문에 프로그램은 운영체제에 종속적이다. 운영체제에서 제공하는 API를 바탕으로 제공되기 때문에 운영체제가 다르면 실행이 되지 않는다.

  • 응용 프로그램의 실행

    • explorer.exe, Finder …

(!) CPU는 한 클락에 한 가지 명령어만 순차적으로 실행하는데, 어떻게 다양한 프로그램을 동시에 실행하는 것 처럼 보여질까?

=> Multitasking을 위한 Scheduling

  1. 아주 짧은 시간 단위로 여러 프로그램의 프로세스를 번갈아가면서 조금씩 실행하기 때문이다. (Multitasking)

  2. 이때 하나의 프로세스가 CPU를 사용 중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해, 이전의 프로세스 상태를 보관하고 새로운 프로세스의 상태를 적재하는 작업을 Context Switching 이라고 한다.

  3. 컴퓨터의 자원들을 프로세스 별로 할당해 주는 것을 통틀어서 Scheduling 이라 한다.

    => 이것 때문에 또 프로그램은 운영체제에 종속적이다.

  • 사용자 계정 관리 및 보안

자꾸 나오는 API 라는 개념은 무엇일까?

API (Application Programming Interface)

​ -> 응용 프로그램에서 사용할 수 있도록, 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.

Interface?
  • 사물 간 또는 사물과 인간 간의 의사소통이 가능하도록 일시적 혹은 영속적인 접근을 목적으로 만들어진 물리적, 가상적 매개체를 의미한다.

즉, 프로그램을 만들 때 어떤 기능을 쓸 수 있게 코드를 미리 준비해주는 것이다. ~~ 가이드 내용대로 코드를 쓰면 ~~ 기능을 쓸 수 있다.

예를들어 페이스북 소셜로그인 API를 적용시에, 너의 사이트에서 페이스북 계정을 통해 로그인할 수 있는 기능을 준비해뒀어. 내가 써놓은 가이드를 보고 ~~ 콜백 URL 넣고 ~~ 방식으로 코드를 작성하면 돼


프로그램

명령어들의 집합. 기계어 (명령어, Instruction)

ex) ‘0x000000FF’ 는 ‘더하기’ 이다.

​ ‘0x000000FE’ 는 ‘빼기’ 이다.

CPU에 32비트를 전기적으로 넣어주면 ‘더하기’ 처리를 한다. 이런 식의 하드웨어 장치와 숫자(이진수)의 매핑을 기계어 라고 한다. 기계어에서 나아가서 좀 더 사람들이 이해하기 쉽게 어셈블리어를 만들었다. 더 나아가서 생산성을 높이고 이해하기 쉽게 추상화를 시키기 위해서, 프로그래밍 언어가 만들어졌다.

ex) x + y 라는 코드는 add x y

이 때 프로그래밍 언어로 작성된 소스코드는 단순한 Text 파일이다. CPU는 명령어를 수행하기 때문에 이대로는 실행할 수가 없다. 이 소스코드를 실행 가능한 파일로 만들기 위해 별도의 과정을 거쳐야만 하는데, 이 과정이 바로 컴파일이다.

컴파일이란 [텍스트 파일 -> 어셈블리어 -> 기계어] 의 번역 과정을 통해 소스코드를 CPU가 실행가능한 포맷으로 만드는 과정이다.

이 때 번역된 파일을 실행 파일(프로그램) 이라고 한다. 또한 번역하는 프로그램을 컴파일러 라고 부른다.

*컴파일러 프로그램은 운영체제와 CPU의 아키텍처에 종속적이다.

Q) 리눅스에서 컴파일한 프로그램은 윈도우에서 실행되지 않는다

Q) Intel 아키텍처에 맞게 컴파일한 프로그램은 ARM 아키텍처 CPU를 쓰는 컴퓨터에서 실행되지 않는다.

Q) Intel 윈도우에서 작성한 소스코드를 복사해서 ARM 윈도우에서 컴파일하는 경우, 소스코드는 단지 텍스트 파일이라 문제없이 실행된다.

Q) Intel 리눅스에서 작성한 소스코드를 복사해서 ARM 윈도우에서 컴파일하면 될 수도 있고 안될 수도 있다. (소스코드가 운영체제에 종속적인 기능을 사용하는지의 여부에 달려있다)


프로세스 (강의 내용에 덧붙여 업데이트 예정입니다)

프로세스란 실행 중인 프로그램이다. 프로그램의 명령어와 정적 데이터가 메모리에 적재되면 실행 중인 프로그램인, 프로세스가 된다.