{"componentChunkName":"component---src-templates-blog-post-js","path":"/Operating-Systems/2020-03-22-운영체제-cross-platform-application-program/","result":{"data":{"site":{"siteMetadata":{"title":"Hun's Footsteps 🥷","author":"전여훈","siteUrl":"https://jeonyeohun.netlify.app","comment":{"disqusShortName":"","utterances":"jeonyeohun/jeonyeohun.github.io"},"sponsor":{"buyMeACoffeeId":"jeonyeohun"}}},"markdownRemark":{"id":"69c4e9dc-7f66-551a-ba91-b61d3de11d96","excerpt":"참고도서: Operating System Concepts (10/E) Abraham Silberschatz, Peter B. Galvin, Greg Gagne Application Program in All OS? 우리가 사용하는 컴퓨터 시스템은 다양한 운영체제의 종류가 있다. 그리고 모든 application programdms…","html":"<p>참고도서: <em>Operating System Concepts (10/E) Abraham Silberschatz, Peter B. Galvin, Greg Gagne</em></p>\n<h1 id=\"application-program-in-all-os\" style=\"position:relative;\"><a href=\"#application-program-in-all-os\" aria-label=\"application program in all os permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Application Program in All OS?</h1>\n<p>우리가 사용하는 컴퓨터 시스템은 다양한 운영체제의 종류가 있다. 그리고 모든 application programdms 각 운영체제에 맞게 설계되고 개발되어져 있다. 하나의 응용프로그램이 여러 운영체제에서 동시에 사용되도록 만드는게 가능할까? 결론부터 말하자면, 가능하지만 조건부로 가능하다고 말하고 싶다.</p>\n<p>각 운영체제는 독자적인 system call의 집합을 가지고 있다. 운영체제끼리 비슷한 system call를 가지고 있을 수는 있지만 완벽하게 동일하게 구성되어 있다면, 그건 두 운영체제가 다른 운영체제라고 말하기 어려운 것이다. 하지만 몇개의 방법을 통해서 여러 운영체제에서 동작하도록 하는 것이 가능하긴 하다.</p>\n<h2 id=\"interpreter-language-based-program\" style=\"position:relative;\"><a href=\"#interpreter-language-based-program\" aria-label=\"interpreter language based program permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Interpreter Language Based Program</h2>\n<p>어떤 프로그램이 인터프리터 언어로 작성되었다면, 여러 운영체제에서 실행되는게 가능해진다. 인터프리터는 소스코드 전체를 해석해서 하나의 실행파일을 만드는 방식이 아니라 소스 프로그램의 각 라인을 읽어서 그에 맞는 명령과 system call을 운영체제에서 실행하게 된다. 따라서 어떤 system call을 사용해야 한다고 정해져 있는 소스가 아니기 때문에 운영체제 마다 동일한 명령이 수행될 수 있다. 하지만 운영체제의 인터프리터는 운영체제의 일부 기능만 사용할 수 있기 때문에 응용 프로그램의 기능이 제한될 수 있다는 단점이 있다.</p>\n<h2 id=\"use-virtual-machineruntime-environment\" style=\"position:relative;\"><a href=\"#use-virtual-machineruntime-environment\" aria-label=\"use virtual machineruntime environment permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Use Virtual Machine(Runtime Environment)</h2>\n<p>어떤 프로그래밍 언어로 작성된 응용프로그램은 해당 프로그램을 담는 Runtime Environment 를 가지고 있다. 가장 흔하게 우리가 사용하는 부분이 Java 응용프로그램에서 지원하는 JVM, 자바 가상머신이다. 가상머신 위에서 응용프로그램이 실행되기 때문에 이런 RTE를 지원하는 운영체제라면 어디서든 사용할 수 있다는게 큰 장점이다.</p>\n<h2 id=\"use-api\" style=\"position:relative;\"><a href=\"#use-api\" aria-label=\"use api permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Use API</h2>\n<p>응용프로그램 개발자가 각각의 응용프로그램이 운영체제 환경에 맞게 컴파일 될 수 있도록 컴파일러에 API나 표준 언어를 만들어 사용하는 방법도 있다. 그런데 이 방법은 시간이 정말 많이 들어가는 일이고, 운영체제가 업데이트 될 때마다 새로운 요소를 이식해줘야하는 번거로움이 있다.</p>\n<p>구조적으로 모든 운영체제에서 작동하는 응용프로그램을 만드는 것은 불가능하지만, 프로그램의 이진 코드가 운영체제가 상호작용하는 방법을 정의하는 것을 통해 어느정도는 해결할 수 있다. 우리가 API를 사용해서 응용 프로그램의 특정 기능을 지정하는 것처럼 이진 코드의 운용방법을 작성한 것을 ABI(Application Binary Interface) 라고 한다.</p>","frontmatter":{"title":"[운영체제] 모든 운영체제에서 실행가능한 프로그램을 만들 수 있을까?(Cross-Platform Application Program?)","date":"March 22, 2020"}}},"pageContext":{"slug":"/Operating-Systems/2020-03-22-운영체제-cross-platform-application-program/","previous":{"fields":{"slug":"/Operating-Systems/2020-03-22-운영체제-운영체제구조/"},"frontmatter":{"title":"[운영체제] 운영체제의 설계 구조(Operating System Design and Structure)","category":"Operating-Systems","draft":false}},"next":{"fields":{"slug":"/Database/2020-03-31-데이터베이스-ER설계/"},"frontmatter":{"title":"[데이터베이스] E-R 다이어그램(E-R Diagram)","category":"Database","draft":false}}}},"staticQueryHashes":["2486386679","3128451518"]}