전체 글 29

여러 작업을 수행하는 애플리케이션

애플리케이션은 운영체제를 플랫폼으로 삼아 작업을 수행하는 온갖 종류의 프로그램이나 소프트웨어 시스템을 총칭하는 용어다. 애플리케이션은 조그마할 수도 있고 클 수도 있다. 하나의 특정 과제에 집중할 수도 있고 폭넓은 기능을 처리할 수도 있다. 판매될 수도 있고 무료로 배포될 수도 있다. 애플리케이션의 코드는 소유권이 강하게 보호되거나, 자유롭게 사 용할 수 있는 오픈소스이거나, 사용에 아무런 제한이 없기도 한다. 애플리케이션의 크기는 천차만별이다. 한 가지 기능만 수행하는 조그만 독립적인 프로그램부터 워드나 포토샵처럼 여러 가지 복잡한 작업을 수행하는 대형 프로그램까지 다양하다. date 프로그램은 맥OS를 비롯한 유닉스 계열 시스템에서는 같은 방식으로 작동하고, 윈도우에서도 유사하게 작동한다. date의..

IT 지식 2022.09.07

파일을 휴지통에 넣을 때 일어나는 일

파일 제거하기 파일이 제거될 때는 앞에서와 정반대 일이 일어난다. 파일의 블록이 미사용 목록으로 돌아가고 파일의 폴더 엔트리는 삭제돼서 파일이 사라진 것처럼 보인다. 하지만 실제는 이와 꽤 다르고, 여기에 몇 가지 흥미로운 점 이 있다. 파일이 윈도우나 맥 OS에서 제거되면 휴지통으로 간다. 휴지통은 일부 속성이 조금 다르다는 점을 제외하면 그저 또 다른 폴더처럼 보인다. 사실 휴지통이 바로 그런 것이다. 파일이 제거되기로 하면 그 파일의 폴더 엔트리와 전체 이름이 현재 폴더에서 휴지통이라는 폴더로 복사되고 원래 폴더 엔트리는 지워진다. 파일의 블록과 그 내용은 전혀 바뀌지 않는다. 휴지통에서 파일을 복원할 때는 이 과정을 정반대로 수행해서, 엔트리를 원래 폴더로 복구한다. 휴지통 비우기가 원래 의도했던..

IT 지식 2022.08.31

파일 시스템과 블록

파일 시스템은 운영체제에서 하드 디스크, CD와 DVD, 다른 이동식 메모리 장치 같은 물리적인 저장 매체를 파일과 폴더의 계층 구조처럼 보이게 하는 부분이다. 파일 시스템은 논리적 구성과 물리적 구현 간의 분리를 보여 주는 훌륭한 사례다. 파일 시스템은 다양한 종류의 장치에 정보를 조직화하고 저장하지만, 운영체제는 모두 동일한 인터페이스로 표시한다. 앞으로 살펴보겠지만, 파일 시스템이 정보를 저장하는 방식은 실생활에 영향을 미칠뿐더러 법적인 영향력도 가진다. 따라서 파일 시스템에 대해 배우는 것은 파일 제거하기가 왜 해당 내용이 영원히 사라졌음을 의미하지 않는지 이해하기 위해서이기도 하다. 여러분 대부분은 윈도우 파일 탐색기나 맥 OS 파인더를 사용해 봤을 것이다. 각 프로그램에서는 최상위(예를 들면,..

IT 지식 2022.08.31

운영체제가 일하는 법

프로세서는 컴퓨터가 켜졌을 때 영구 기억 장치에 저장된 약간의 명령어를 실행해서 작동을 시작하도록 구성되어 있다. 그런 다음 이 명령어로 작은 플래시 메모리에서 명령어를 읽는데, 여기에는 디스크 상의 알려진 위치, USB 메모리, 또는 네트워크 연결에서 더 많은 명령어를 읽는 코드가 포함돼 있다. 그렇게 해서 플래시 메모리에서 읽은 명령어는 최종적으로 유용한 작업을 하기에 충분한 코드가 로드될 때까지 더욱더 많은 명령어를 읽는다. 이렇게 컴퓨터가 작동을 시작하는 과정은 원래 자력으로 해내다라는 오래된 표현에서 나온 부트 스트래핑이라고 불렸는데, 지금은 그냥 부팅이라고 한다. 프로세서마다 세부 사항은 다르지만 기본 아이디어는 같다. 약간의 명령어는 더 많은 명령어를 찾기에 충분하고, 또 한층 더 많은 명령..

IT 지식 2022.08.30

가상 운영체제와 가상 머신

운영체제가 프로그램이라고 말했던 것에 주목해 보자. 운영체제는 앞에서 살펴본 수 합산하기 같은 간단한 프로그램과 마찬가지로 그저 하나의 프로그램이고, 그런 프로그램과 같은 종류의 프로그래밍 언어로 작성되며 대부분 C나 C++로 구현된다. 초기 운영체제는 크기가 작았는데, 메모리도 더 작고 작업이 더 단순했기 때문이다. 초창기의 운영체제는 한 번에 한 개의 프로그램만 실행했으므로 스와핑이 제한적으로 이루어졌다. 게다가 할당할 메모리도 100KB 미만으로 많지 않았다 다뤄야 할 외부 장치도 적었고, 오늘날처럼 종류가 다양하지 않았다. 지금은 운영체제가 매우 크고 복잡한데(코드가 수백만 행 이상이다), 그만큼 다양하고 복잡한 일을 처리하기 때문이다. 비교해 보자면, 많은 운영체제의 조상 격인 유닉스 운영체제)..

IT 지식 2022.08.23

컴퓨터를 작동하게 만드는 운영체제

"프로그래머의 작업은 시인과 마찬가지로 순수한 사고의 산물에 가깝다. 허공에 공기로 성을 쌓고 상상력을 동원하여 자신의 성을 창조해 나간다. 이토록 유연하며 다듬기 쉽고, 웅장한 개념적 구조를 손쉽게 실현할 수 있는 표현 수단은 찾아보기 힘들다." - 프레더릭 브루스 1975 소프트웨어의 두 가지 주요한 유형인 운영체제와 애플리케이션을 살펴보려고 한다. 앞으로 알아보겠지만 운영체제는 컴퓨터 하드웨어를 관리하고 다른 프로그램을 실행할 수 있게 하는 소프트웨어의 기초 구조물이며, 그 위에서 실행되는 프로그램을 애플리케이션이라고 한다. 집이나 학교, 사무실에서 컴퓨터를 쓸 때 이용할 수 있는 프로그램은 매우 다양하다. 브라우저, 워드 프로세서, 음악과 영화 재생 프로그램, 세무 처리용 소프트웨어, 바이러스 검..

IT 지식 2022.08.23

기술 표준의 중요성과 자유로운 소프트웨어 오픈소스

기술 표준 표준은 어떤 기술적 산물이 어떻게 만들어지고 어떻게 작동하도록 되어 있는지 명확하고 상세하게 기술한 것이다. 워드의 .doc와 .docx 파일 포맷 같은 어떤 표준은 '사실상의' 표준으로 공식적으로 정해지지는 않았지만 모든 이들이 그 기술을 사용한다. '표준'이라는 용어는 무언가가 어떻게 만들어지고 작동하는지 정의하는 정규화된 표현을 뜻한다고 보는 것이 적합하며, 보통은 정부 기관이나 컨소시엄 같은 준중립적인 단체에 의해 개발되고 유지된다. 표준으로 정의된 내용은 개별 주체들이 의사소통하고 독자적으로 구현할 수 있을 만큼 완전하고 정확하다. 주변에 얼마나 많은지 알아채지 못할 수도 있겠지만, 우리는 항상 하드웨어 표준의 혜택을 누리고 있다. TV를 예로 들어보자. 새 TV를 사면 집에 있는 콘..

IT 지식 2022.08.21

구글 같은 서비스는 어떻게 개발할까?

현실에서 프로그래밍은 대규모로 이루어지는 경향이 있다. 이때 사용되는 전략은 책을 쓰거나 다른 큰 프로젝트에 착수할 때와 비슷하다. 무엇을 해야 할지 파악하고, 넓은 명세부터 시작해서 점차 작은 부분으로 적절히 나누고, 각 부분을 작업하면서 전체적으로 일관되어 있는지 확인해야 한다. 프로그래밍에서 작업 하나의 크기는 보통 한 사람이 프로그래밍 언어로 정확한 처리 단계를 작성할 수 있는 정도다. 프로그래밍 입문 수업에서 작성할 만한 작은 프로그램은 수십에서 수백 행의 코드로 되어 있다. 오늘날 유용한 작업을 하기 위해 만들어진 더 큰 프로그램은 아마 수천에서 수만 행 정도가 될 것이고, 컴파일러나 웹 브라우저는 코드가 수십만에서 수백만 행에 이를 것이며, 대규모 시스템은 수백만 행, 심지어 수천만 행의 코..

IT 지식 2022.08.21

작문과 비슷한 프로그래밍

포트란 코볼, 베이직이 성공했던 이유 중 하나는 특정 응용 분야에 집중했기 때문이다. 이 언어들은 굳이 모든 프로그래밍 과제를 처리하려고 하지 않았다. 1970년대에 '시스템 프로그래밍' 용도로, 즉 어셈블러, 컴파일러, 텍스트 편집기 같은 프로그래머 도구와 심지어 운영체제까지 작성할 목적으로 사용할 언어들이 만들어졌다. 그중 단연코 가장 성공적이었던 것은 C 언어다. C는 1973년에 벨 연구소에서 일하던 데니스 리치가 개발했고, 아직도 폭넓게 사용되며 가장 인기 있는 언어 중 하나다. C는 개발 이후 미미하게 변경돼서 오늘날의 C 프로그램은 30년 - 40년 전의 코드와 거의 비슷해 보인다. 1980년대에 들어서는 규모가 매우 큰 프로그램의 복잡성 관리를 도울 의도로 설계된 언어들이 개발되었고 C++..

IT 지식 2022.08.20

고수준 언어에서 프로그램 실행까지

1950년대 말, 1960년대 초에 컴퓨터가 프로그래머를 대신해서 더 많은 일을 수행하게 되는 또 다른 움직임이 일어났는데, 아마도 프로그래밍의 역사에서 가장 중요한 발걸음이었을 것이다. 바로 특정 프로세서 아키텍처에 독립적인 고수준 프로그래밍 언어의 개발이다. 고수준 언어를 쓰면 사람이 표현하는 방식에 가까운 용어로 계산 과정을 작성할 수 있다. 고수준 언어로 작성된 코드는 번역기 프로그램을 통해 대상 프로세서의 어셈블리 언어로 된 명령어로 변환된 다음, 어셈블러에 의해 비트로 변환되어 메모리에 로드되고 실행된다. 여기서 번역기 프로그램은 보통 컴파일러라고 불리는데, 그다지 통찰력이나 직관이 느껴지지 않는 역사적 용어다. 일반적인 고수준 언어세너는 두 수 X와 Y를 더하고 결과를 Z에 저장하는 계산이 ..

IT 지식 2022.08.20